我查下来好像是js赋值数组和对象时赋的不是值而是引用地址
但是
var a={"a":0};
var b={};
b=a;
b={"a":1};
alert(a['a']);
这样写弹出的是0,按照引用地址的方法,这个岂不是也会弹出1?

解决方案 »

  1.   

    var a={"a":0};
    var b={};
    b=a; // b 与 a 引用同一个对象地址
    b['a']=1;
    alert(a['a']);------------------var a={"a":0};
    var b={};
    b=a; // b 与 a 引用同一个对象地址
    b={"a":1}; // b 从新建立了一个对象,开辟了新地址
    alert(a['a']);
      

  2.   

    var a={"a":0}; // 实例化一个对象
    var b={}; // 实例化一个对象
    b=a; // b 与 a 引用同一个对象地址,原有b的实例被注销
    b={"a":1}; // b 从新实例化一个对象
    b['a']=1;
    alert(a['a']);数据存放的地址,只有在新实例化的时候才会变动,其他时候都是引用地址
      

  3.   

    var a={"a":0};
    var b={};
    b=a; //这是引用
    b={"a":1}; //重新赋值就不是引用了
    alert(a['a']); //弹出0//如果这样
    b = a;
    b.a = 2;
    alert(a['a']); //弹出2
      

  4.   

    b=a;相当于  a和b都指向了{"a":0};
    b={"a":1};你操作了b变量指向的对象,因为都指向那个同一个对象。
    alert(a['a']);会弹1
      

  5.   


    你可以自己定义一个复制的方法,百度搜一下一大把
    或者把对象转换成字符串再解析成json,变相复制过来了~b=$.parseJSON(JSON.stringify(a))
      

  6.   

    http://www.phperstar.com/post/194function copyObject(obj){
      var result = {};
      for (var name in obj){
        result[name] = obj[name];
      }
      return result;
    }
      

  7.   

    b=a只是赋值,不改变a本身,所以b改变a并没有变
      

  8.   

    看错 
    赋值的时候把里面a的指针传了过去,所以b['a']的改变也改变了a['a']