JS 笔记 第 3 章 语言基础

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