全局对象和包装对象


全局对象

全局对象的属性是全局定义的符号,JavaScript 解释器启动时将会创建一个新的全局对象,并给它一组定义的初始属性,然后 JavaScript 程序可以直接使用:

  • 全局属性:undefined、Infinity、NaN
  • 全局函数:isNaN()、parseInt()、eval()
  • 构造函数:Date()、RegExp()、String()、Object()、Array()
  • 全局对象:Math、JSON

不在任何函数内的 JavaScript 代码可以使用 JavaScript 关键字 this 来引用全局对象:

var global = this

在客户端 JavaScript 中,Window 对象充当了全局对象,这个全局 Window 对象有一个属性 window 引用其自身,可以代替 this 来引用全局对象。

包装对象

JavaScript 对象是一种复合值,它是属性或已命名值的集合,通过「.」符号来引用属性值,当属性值是一个函数的时候,称其为方法。

字符串不是对象,但是却有属性和方法,这是因为,只要引用了字符串的属性,JavaScript 会将字符串值通过 new String(s) 的方式将其转换成对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦对象引用结束,这个对象随即被销毁:

字符串属性和方法

对象引用结束后对象被销毁,所以 s.len 的值为 undefined

同字符串一样,数字和布尔值也具有各自的方法,通过 Number()Boolean() 构造函数创建一个临时对象,这些方法的调用都来自于这个临时对象。其销毁逻辑和字符串一样。

nullundefined 没有包装对象,访问它们的属性会导致一个类型错误。

存取字符串、数字或布尔值的属性时创建的临时对象就是包装对象。由于字符串、数字和布尔值的属性都是只读的,并且不能给它们定义新属性,因此是有别于对象的。

此外,包装对象可以显式创建,这种情况下就不受自动转化对象的销毁逻辑约束:

显式创建字符串对象

== 会将原始值和包装对象视为相等,但两种的类型是不一样的:

对象比较


点赞 取消点赞 收藏 取消收藏

<< 上一篇: 布尔值、null 和 undefined

>> 下一篇: 基本类型和引用类型的比较