日期:2014-05-16  浏览次数:20372 次

天啊!这个该怎么理解啊!
javascript中对象部分中的delete运算符中说"delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性"
但是再看这段代码
a = {p:{x:1}};
b = a.p;
delete a.p;

执行这段代码之后,为什么b.x的值依然是1呢?
按照我的理解,delete断开了属性p和宿主对象a的联系,也就是说对象a不再拥有属性p,那b.x还怎么调用a.p得到值1呢?

------解决方案--------------------
a = {p:{x:1}};
b = a.p;
delete a.p;

你删除的是a的成员变量啊,也就是删除{x:1}的一个引用,而{x:1}对象的引用数是2,只要引用不为0,{x:1}就存在,

你这样试试
a = {p:{x:1}};
a.p = null;
delete a.p;
------解决方案--------------------
b 被赋值 为 {x:1},也就是b.x = 1。

然后。。。就没然后了。删掉a不影响b。
------解决方案--------------------
a= {p:{x:1}};
b=a.p;
delete a.p.x
console.log(b.x)