基本包装类型
由于基本类型值没有 .length
和 .toString()
.toFixed()
这样的属性和方法,需要通过封装对象才能访问,此时 JavaScript 会自动为基本类型值包装一个封装对象。
1 | let s1 = "some text"; |
上面的代码其实在后台进行了下面的一系列处理:
- 创建 String 类型的一个实例;
- 在实例上调用指定的方法;
- 销毁这个实例。
可以想象成是执行了下列的 ECMAScript 代码
1 | let s1 = new String("some text"); |
上面的三个步骤也适用于 Boolean 和 Number 类型对应的布尔值和数字值。
引用类型与基本包装类型的主要区别就是对象的生存期。使用 new 操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型对象,则只存在于一行代码的执行瞬间,然后立即被销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。比如下面这个例子:
1 | let s1 = "some text"; |
问题就在于 第二行创建的 String 对象在执行 第三行代码时已经被销毁了,第三行代码又创建自己的 String 对象,而该对象没有 color 属性。
不推荐主动进行 new String、new Number、new Boolean 的操作。