给字符串添加属性

引用类型与原始值包装类型的主要区别在于对象的生命周期,在通过new实例化引用类型后,得到的实例会在离开作用域时被销毁,而自动创建的原始值包装对象则只存在于访问他的那行代码执行期间,这意味着不能在运行时给原始值添加属性和方法
eg:
let s1 = "some text"
s1.color = "red"
console.log(s1.color) //undefined
这里的第二行代码尝试给字符串s1添加一个color属性,可是,当第三行代码访问color时,它却不见了,原因是第二行代码运行时会临时创建一个String对象,而当第三行代码执行时,这个对象已经被销毁了,实际上,第三行代码在这里创建了自己的String对象,但这个对象没有color属性

可以显示地使用Boolean、Number和String构造函数创建原始值包装对象。不过应该在确定必要时再这么做,否则容易让开发者疑惑,分不清他们到底是原始值还是引用值,在原始值包装类型的实例上调用typeof会返回"object",所有原始值包装对象都会转换为布尔值true

另外,Object构造函数作为一个工厂方法,能够根据传入值的类型返回相应原始值包装类型的实例
比如:
let obj = new Object("some text")
console.log(obj instanceof String) //true
obj.color = "red"
console.log(obj.color) //red

你可能感兴趣的:(给字符串添加属性)