- alert 弹窗提醒一段文本
- a = prompt("input desc") 接收输入,并把内容赋值给 a
- confirm 弹出确认窗口,让用户确认,这是给出的结果就是 yes/no
- console.log('AAS') 输出一段日志
- let a = 1 声明 变量 a=1,number 类型
- const ABB = 123 声明一个常量 ABB, 不可以重新赋值
- undefined 和 null 都是空的意思,但是这两个又不相同
- a ?? "hello" ;
??
叫做 空值运算符,指当 a 未被赋值时,将 hello 赋值给 a,如果 a 已经被赋值了,则不变 ; a 需要被声明,在 JavaScript 中 声明 和 赋 值 是两件事情
js 的数据类型
- js 是弱类型语言,1 == '1' => true; 但是 1 === '1' => false; 6 / "2" => 3, typeof is number
支持判断
if /elif else
支持的循环方式
do {
// Hello
} whIle ()
for (a=1;a<10;a+=2) {
// Hello
}
a = 100;
switch (a) {
case (a = 100):{
//Hello
break;
}
default:
alert(a);
}
函数声明
必须要使用 function
function showMessage() {
alert('Hello Javascript !');
}
- 函数中变量的作用域:这部分与 Python 和 C 一 致,分别为 内部变量 和 外部变量;关系存在在继承的概念
- 函数的参数,入参定义在 () 内,当函数声明了入参后,在对应调用时,就需要传递符合条件的参数
- 支持函数的默认值的设定
- 函数的返回值,同样使用 return 作为返回值处理
- 函数 function is an action, 所以函数的命名通常是 使用动词;javascipt 的命名方式 官方建议为 驼峰的方式
函数的特殊部分
- 函数表达式 let sayHi = function () { alert('Hi')} 利用声明
let
创建了一个函数,并把他赋值给了变量 sayHi - 回调函数
[ ] 今天学习的内容到此 回调函数 https://zh.javascript.info/function-expressions
严格模式
- 三连表达式 cond ? resultA : resultB // 1 > 0 ? alert(true) : alert(false) cond 为真展示 resultA, 反之展示 resultB
- 空值运算符 a ?? b => a ?? b 的结果是 a,除非 a 为 null/undefined,这时结果是 b
开发行为规范
BDD
在 BDD 中,规范先行,实现在后。最后我们同时拥有了规范和代码。
规范有三种使用方式:
- 作为 测试 —— 保证代码正确工作。
- 作为 文档 —— describe 和 it 的标题告诉我们函数做了什么。
- 作为 案例 —— 测试实际工作的例子展示了一个函数可以被怎样使用。
有了规范,我们可以安全地改进、修改甚至重写函数,并确保它仍然正确地工作。
这在一个函数会被用在多个地方的大型项目中尤其重要。当我们改变这样一个函数时,没有办法手动检查每个使用它们的地方是否仍旧正确。
如果没有测试,一般有两个办法:
- 展示修改,无论修改了什么。然后我们的用户遇到了 bug,这应该是我们没有手动完成某些检查。
- 如果对出错的惩罚比较严重,并且没有测试,那么大家会很害怕修改这样的函数,然后这些代码就会越来越陈旧,没有人会想接触它。这很不利于发展。自动化测试则有助于避免这样的问题!
如果这个项目被测试代码覆盖了,就不会出现这种问题。在任何修改之后,我们都可以运行测试,并在几秒钟内看到大量的检查。
另外,一个经过良好测试的代码通常都有更好的架构。
当然,这是因为覆盖了自动化测试的代码更容易修改和改进。但还有另一个原因。
要编写测试,代码的组织方式应确保每个函数都有一个清晰描述的任务、定义良好的输入和输出。这意味着从一开始就有一个好的架构。
在实际开发中有时候可能并不容易,有时很难在写实际代码之前编写规范,因为还不清楚它应该如何表现。但一般来说,编写测试使得开发更快更稳定。
Object 对象的基础知识
在 js 中 对象可以说非常常见的用到,所以相对来讲 定义一个对象也是非常的方 便
let user = new Object(); 构造函数 的语法
let user = {} 构造 "字面量的语法"
在对象中,包含的是 一个个属性,这些属性又以 键值对 的形式出现在 中
- 定义一个有属性的对象
let user = {name:'alex', age: 18}
- 增加属性 user.city = 'Shanghai' => user['love package'] = 'Apple'
- 删除一个属性 delete user.age
- 计算属性 :当创建一个对象时,我可以在对象字面量中使用方括号,这叫做计算属性;计算属性的含义是 [fruit] 是从 变量 fruit 中获取的
- 判断一个 属性是否在对象中 "key" in Object ,这里的 key 需要时一个值,否则会被认为一个变量
- 遍历一个对象采用的方式是 for (let key in Object) : 这里的做法是 声明[let] 变量 key,并且把 Object 中的每一个 key 的值遍历赋予 key
- 取出对象中一个 key 的值可以采用的方式 Object[key] 或者 Object.key;但是 Object.key 会出现对
多词属性
- 单词属性 name , age
- 多词属性 "like birds" ,这时使用 Object.key 的方式就不可行了
JavaScirpt 中的垃圾回收机制
当一个对象中的属性被建立后,如果这些属性被多个对象引用时,其他一个对象被重新赋值了,那么这些属性还是可以被访问的;但是当所有对象被重置后,这些无法被访问的属性 就变得不可以,这也会占用我们内存,而这类也会被 回收。