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呢?

解决方案 »

  1.   

    x=1并不是a的属性 而是p的属性
     猜测
      

  2.   

    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;
      

  3.   

    你这样试试
    a = {p:{x:1}};
    a.p = null;
    alert(b.x);
      

  4.   

    b 被赋值 为 {x:1},也就是b.x = 1。然后就没然后了。删掉a不影响b。
      

  5.   

    a= {p:{x:1}};
    b=a.p;
    delete a.p.x
    console.log(b.x)
      

  6.   

    <html class="">
    <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>
      

  7.   

    你们的意思是b=a.p;这个赋值语句是用b来引用{x:1}这个对象,而跟a.p本身无关,然后delete是切断了a和p的关系,而跟{x:1}本身无关,是吗?
      

  8.   

    你们的意思是b=a.p;这个赋值语句是用b来引用{x:1}这个对象,而跟a.p本身无关,然后delete是切断了a和p的关系,而跟{x:1}本身无关,是吗?是,画的图更好理解
      

  9.   

    a = {p:{x:1}};
    b = a.p; //b 指向了 {x:1},也就是 a.p 和 b 都指向了 {x:1}
    delete a.p; //切断了一个,但还有一个(b)