var data = {"a1" : {"b1": 33}};
var abc = data.a1;
alert(abc.b1);
data.a1 = {"b1":44};
alert(abc.b1);
为什么两次输出都是33???

解决方案 »

  1.   

    你可以把data.a1看作是指针,data.a1赋值后它只是指向了另一个地方,前一个对象的内容并没改变
      

  2.   

    你如果alert(data.a1)觉得不是33,
    你的abc 变量在你改变data.a1后未重新赋值当然还是33!!!
      

  3.   


    var data = {"a1" : {"b1": 33}};
    var abc = data.a1;
    alert(abc.b1);
    data.a1 = {"b1":44};
    abc = data.a1;//注意
    alert(abc.b1);看来你的想法是这样的
      

  4.   

    A.B->C
    D->C
    A.B->E
    //D->C
      

  5.   

    这样用,结果就不同了.
    <script type="text/javascript">
    var data = {"a1" : {"b1": 33}};
    var abc = data;
    alert(abc.a1.b1);  //33
    data.a1 = {"b1":44};
    alert(abc.a1.b1);  //44
    </script>var abc = data.a1;
    这是值引用,只复制数据,没有关联关系.过后再改变data.a1但不对abc重新赋值,abc就仍然保持上次赋值时的数据.var abc = data; 
    这是地址引用或称指针引用,有关联关系.过后改变data.a1时,abc会随之反映出来.这个区别就是,对一个变量赋予对象则这个赋值是指针引用,而对一个变量赋予对象的属性时就是值引用.
      

  6.   

    这和通常见到的很类似:var obj = document.getElementById(id);
    之后你可以通过obj操作 document.getElementById(id)但如果是
    var obj = document.getElementById(id).value;
    之后obj只是此时document.getElementById(id)的value,一旦过后document.getElementById(id)的value发生变化,两者并不会自动对应.
      

  7.   

    很烦去掉发言人ID的采集器,补充上:上面二楼都是theforever_csdn所发.