第三章 类型,值和变量
⭐3.6 包装(Wrapper)对象
JS对象是复合型的值:它们是 属性 或 具名值 的合集。
我们使用.
记号来引用属性的值。
当属性的值是一个函数时,我们管它叫做方法。
我们使用o.m()
来调用对象o
的方法m
。
我们之前还知道,字符串也拥有属性和方法:
字符串并不是对象,为什么它们还拥有属性?
当你引用字符串s
的某个属性时,JS都把这个字符串值,通过调用new String(s)
方法,转换成一个对象。
这个对象继承了字符串方法,用来解决(resolve)上面这个属性引用的问题(原字符串没属性,相当于“借台唱戏”,借临时对象这个“台”,唱它想引用的那个属性的“戏”)。
当resolve完成,这个新创建出来的对象就被抛弃了,戏唱完了拆台。(但具体实现可能这个新建,然后销毁的过程会不太严格,但大体是这个过程)
数字和布尔值和字符串一样,也有这样的一个过程:Number()
和Boolean()
构造器创建一个临时对象,然后用这个临时对象调用方法。
然而null
和undefined
没有包装对象,也就不能调用属性,会报TypeError
,没台唱不了戏。
看一个例子:
这个临时对象就叫包装对象,把xx值和xx对象区分开来。
但这都是底层细节,不用抠得太细,知道有这么一回事儿,并且知道这些属性都是只读,你也不能给它定义新属性(其实是可以定的,就是用不了)就够了。
值==包装类
是true
,值===包装类
是false
。