3.1 语法
区分大小写,标识符的开头必须是字母、_
或$
,使用驼峰大小写,首字母小写
关键字、保留字、null、true、false不能作为标识符
严格模式可以不破坏ECMAScript 3语法
语句结尾的分号,省略则意味着由解析器确定语句结尾,推荐使用
始终在控制语句中使用代码块,可以让内容更清晰,也可以减少出错的可能性
3.2 关键字与保留字
不能用作标识符或者属性名,未来的保留字也不要用
3.3 变量
松散类型,变量可以用来保存各种类型的数据,每个变量名都只是命名占位符
3.3.1 var
声明范围是函数作用域,会成为包含它的函数的局部变量,在函数退出时销毁
不推荐改变变量值的类型
声明提升:把所有变量声明都拉到函数作用域的顶部
允许冗余声明,反复var同一个变量是可行的
3.3.2 let
声明范围是块作用域
在作用域中,不会被声明提升
不允许同一个块作用域中出现冗余声明
不能依赖条件声明,因为let作用域时块,不可能检查前面是否已经let过同名变量,也不可能在没有声明的时候就用。
for循环的迭代变量若是var,会渗透到循环体外部
用let声明迭代变量,js引擎会在后台为每个迭代声明一个新的迭代变量
3.3.3 const
声明时必须初始化变量,而且修改变量会导致运行时错误
可以保证变量值不被修改,在每次迭代中只创建一个新变量,因此在for-of或for-in中有特别意义
其余同let
3.3.4 声明风格与最佳实践
不用var,优先const
只在提前知道值可能会变的前提下,用let
3.4 数据类型
原始类型,简单数据类型
- Undefined, 声明了变量,但没有初始值
- Null, 空对象指针,Object
- Boolean, true or false
- Number, 采用IEEE754保存整数和浮点数
- String,16位Unicode字符序列
- Symbol,唯一且不可变,确保对象属性使用唯一标识符
复杂数据类型,Object,无序名值对集合,派生其他对象的基类
可以用typeof操作符确定类型
Undefined == Null, Undefined !== Null
如果变量要保存对象,当时又没有这个对象可以保存,初始值就要用null
false: “”, 0, NaN, null, undefined
0.1 + 0.2 != 0.3,永远不要测试特定的浮点值,因为采用了IEEE754格式的双精度浮点值
NaN != NaN
TL,DR 小结
- 六种基本数据类型
- 没有浮点数和整数的区别,全是Number
- Object是所有对象的基类
- ECMAScript提供了类似 C 语言中常见的基本操作符
- 流控制语句也差不多都是从其他语言那里借鉴过来的
- 任何函数都可以在任何时候返回任何值
- 不指定返回值的函数,返回Undefined