javaScript高级程序设计之基本包装类型疑惑
步于 2017-07-05 09:03:07 引用类型与基本包装类型的区别
引用类型与基本包装类型的主要区别就是对象的生存期。
使用 new 操作符创建的引用类型的实例,在执行流离开当前作用域之前,会一直保存在堆内存中。而后台自动创建的基本包装类型的对象,则只存在一行代码的执行瞬间,然后立即被销毁。这意味着我们不能为基本类型的值添加属性和方法。
看了上面的原理,再来看例子:
var str = "some text";
str.color = "red";
console.log(str.color); // undefined
在此,第二行代码试图为字符串str添加一个color属性。但是当第三行代码再次访问str时,其color属性又不见了。问题的原因就是第二行创建的String对象在执行第三行代码时已经被销毁。执行到第三行时,第三行代码又创建了自己的 String 对象,然而这个对象没有 color 属性。一切都显得那么清晰。
疑问1:“只存在一行代码执行瞬间”怎么理解,是指 var str="some text" 这行吗?立即被销毁后,str里还有引用吗?
疑问2:“问题的原因就是第二行创建....”这里说创建了String对象,是哪儿对象?color属性吗?此时的str是啥状态?
疑问3:"第三行代码又创建了自己的String对象.." 是指又创建了str?
望高手不吝指点