语言基础

52 阅读2分钟

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()的返回值相同。