1.关键字
1.1 var关键字
- 使用var 操作符定义的变量会成为包含它的函数的局部变量
- 声明提升
1.2 let 声明
- let 跟var 的作用差不多,但有着非常重要的区别。最明显的区别是,let 声明的范围是块作用域, 而var 声明的范围是函数作用域。
- 与var 关键字不同,使用let 在全局作用域中声明的变量不会成为window 对象的属性(var 声 明的变量则会)。不过,let 声明仍然是在全局作用域中发生的,相应变量会在页面的生命周期内存续。
1.3 const 声明
- const 的行为与let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量
1.4声明风格及最佳实践
- 不使用var
- const 优先,let 次之
2.数据类型
2.1 typeof 操作符
- 用来判断类型有缺点null->object,array->object,精准判断类型的方法Object.prototype.toString.call()
2.2 Null 类型
- null 值表示一个空对象指针,这也是给typeof 传一个null 会返回"object"的原因
2.3 Number 类型
- 0.1+0.2不等于0.3,是因为使用了IEEE 754 数值,这种错误并非ECMAScript 所独有。其他使用相同格式的语言也有这个问题。可以先将小数转成整数进行计算,得到的结果再转换成小数。
- NaN,意思是“不是数值”(Not a Number),用于表示本来要返回数值的操作失败了(而不是抛出错误
2.4 Symbol 类型
Symbol(符号)是ECMAScript 6 新增的数据类型。符号是原始值,且符号实例是唯一、不可变的。 符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。
2.5 Object 类型
1.每个Object 实例都有如下属性和方法。
- constructor:用于创建当前对象的函数。在前面的例子中,这个属性的值就是Object() 函数。
- hasOwnProperty(propertyName):用于判断当前对象实例(不是原型)上是否存在给定的属性。要检查的属性名必须是字符串(如o.hasOwnProperty("name"))或符号。
- isPrototypeOf(object):用于判断当前对象是否为另一个对象的原型。(第8 章将详细介绍原型。)
- propertyIsEnumerable(propertyName):用于判断给定的属性是否可以使用for-in 语句枚举。与hasOwnProperty()一样,属性名必须是字符串。
- toLocaleString():返回对象的字符串表示,该字符串反映对象所在的本地化执行环境。
- toString():返回对象的字符串表示。
- valueOf():返回对象对应的字符串、数值或布尔值表示。通常与toString()的返回值相同。