引用类型与原始值包装类型的区别

262 阅读1分钟

原始包装类型为:Boolean、Number、String

先给出答案

引用类型和原始值包装类型的主要区别在于对象的生命周期。在通过new 实例化的引用类型后,得到的实例会在离开作用域时被销毁,而自动创建的原始值包装对象则只存在于访问它的那行代码执行期间。 那么如何理解这句话呢? 先看一段代码:

let s1 = "some text"

let s2 = s1.substring(2)

理论上来说,原始值s1不是对象,因此逻辑上不应该有次方法。实际上,这是因为后台给它进行了很多的处理。

在以读模式访问时候 上面代码在后台的执行是这样子的:

let s1 = new String("some text")显式创建原始值包装对象

let s2 = s1.substring(2)

s1 = null

实际上就是分了这几个步骤: 1.创建一个实例对象 2.调用实例上的特定方法 3.销毁实例

那么接下来看看这段代码 let s1 = "some text" s1.color = "red" console.log(s1.color) // undefined

这是为什么呢,原因就是第二行代码运行时会创建一个String对象。而当第三行代码执行时,这个对象已经被销毁了