javascript原始值包装类型

it2023-03-03  86

为什么在js中的原始值,可以调用方法,比如说:

let str = 'I love China!'; console.log(str.slice(0,6));//I love

但是却不能给原始值添加属性

str.age = 18; console.log(str.age);//undefined

这一切都和原始值包装类型及其声明周期有关:每当用到某个原始值的属性或者方法使,javascript总会在后台创建一个原始值包装类型的对象,从而暴露出操作原始值的各种方法。

在以读模式访问字符串的方法或者属性时,总会在后台执行以下三步: (1)创建一个原始值类型的实例 (2)调用这个实例上的方法(或读取这个实例上的属性) (3)销毁这个实例 用代码表示出来则为:

let str = new String('I love China!'); console.log(str.slice(0,6)); str = null;

所以在非严格模式下,当我们尝试给原始值赋值时str.age=18,其实是生成了一个原始值包装类型的,也是给它赋了值的,但是,这句话执行完之后,这个原始值包装类型就被销毁了。而在下一次再次读取这个属性时console.log(str.age),其实又再次创建了一个原始值包装类型对象,这个对象和之前那个不是一个对象,所以str.age为undefined

最新回复(0)