JS基本包装类型

基本包装类型

由于基本类型值没有 .length.toString() .toFixed()这样的属性和方法,需要通过封装对象才能访问,此时 JavaScript 会自动为基本类型值包装一个封装对象。

1
2
3
let s1 = "some text";
let s2 = s1.substring(2);
console.log(s2) // me text

上面的代码其实在后台进行了下面的一系列处理:

  1. 创建 String 类型的一个实例;
  2. 在实例上调用指定的方法;
  3. 销毁这个实例。

可以想象成是执行了下列的 ECMAScript 代码

1
2
3
let s1 = new String("some text");
let s2 = s1.substring(2);
s1 = null;

上面的三个步骤也适用于 Boolean 和 Number 类型对应的布尔值和数字值。

引用类型与基本包装类型的主要区别就是对象的生存期。使用 new 操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型对象,则只存在于一行代码的执行瞬间,然后立即被销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。比如下面这个例子:

1
2
3
let s1 = "some text";
s1.color = "red";
console.log(s1.color); // undefined

问题就在于 第二行创建的 String 对象在执行 第三行代码时已经被销毁了,第三行代码又创建自己的 String 对象,而该对象没有 color 属性。

不推荐主动进行 new String、new Number、new Boolean 的操作