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;
执行这段代码之后,为什么b.x的值依然是1呢?
按照我的理解,delete断开了属性p和宿主对象a的联系,也就是说对象a不再拥有属性p,那b.x还怎么调用a.p得到值1呢?
解决方案 »
- JS结合Ajax获取function的返回值,求教!!!!
- js中控制css的问题
- 求助.关于json的问题
- 请问大虾们:firstChild,removeChild和appendChild是什么函数来的?有什么作用?
- 求一个正则表达式写法
- script编码的问题,比较有难度,估计大家没看过
- 如何用脚本控制改变框架的大小?如单击一个图片把某个框架隐藏。
- 高分请教,在<iframe>内嵌窗口中能否调用父窗口中的javascript代码?
- 一个表单验证问题 急!!!
- json解析一个很怪异的问题,解析后的数据值与原来文本中的数据不同,高手帮忙看一下吧
- 仿百度输入框提示问题
- extjs的panel能不能左右收缩
猜测
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;
a = {p:{x:1}};
a.p = null;
alert(b.x);
b=a.p;
delete a.p.x
console.log(b.x)
<head>
<meta charset="UTF-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js" type="text/javascript"></script>
<script type='text/javascript'>
var obj = {x:1};
var a = {p:obj};
var b = obj;
//a.p = null;
obj = null;
alert(b.x);
</script>
</head>
<body></body>
</html>
b = a.p; //b 指向了 {x:1},也就是 a.p 和 b 都指向了 {x:1}
delete a.p; //切断了一个,但还有一个(b)