(转载)javascript中的装箱和拆箱
装箱
把 基本数据类型
转换为对应的 引用类型
的操作称为 装箱
,把 引用类型
转换为 基本数据类型
称为 拆箱
。
每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。 –《javascript 高级程序设计》
1 | var s1 = 'some text'; |
如上所视,变量 s1
是一个基本类型值,它不是对象,所以它不应该有方法。但是 js
内部为我们完成了一系列处理(即我们称之为装箱
),使得它能够调用方法,实现的机制如下:
- 创建
String
类型的一个实例 - 在实例上调用指定的方法
- 销毁这个实例
这个过程也可以用代码来展现:
1 | var s1 = new String('some text'); |
我在很多地方都看到过说装箱操作会泄露内存,可是这里明明是销毁了实例的,哎,我还是相信《javascript 高级程序设计》吧,认为它不会泄露~
拆箱
将 引用类型
对象转换为对应的 基本数据类型
,它是通过 引用类型
的 valueOf()
或者 toString()
方法来实现的。如果是自定义的对象,你也可以自定义它的 valueOf()/tostring()
方法,实现对这个对象的 拆箱
。
1 | var objNum = new Number(123); |