我查下来好像是js赋值数组和对象时赋的不是值而是引用地址
但是
var a={"a":0};
var b={};
b=a;
b={"a":1};
alert(a['a']);
这样写弹出的是0,按照引用地址的方法,这个岂不是也会弹出1?
但是
var a={"a":0};
var b={};
b=a;
b={"a":1};
alert(a['a']);
这样写弹出的是0,按照引用地址的方法,这个岂不是也会弹出1?
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']);
var b={}; // 实例化一个对象
b=a; // b 与 a 引用同一个对象地址,原有b的实例被注销
b={"a":1}; // b 从新实例化一个对象
b['a']=1;
alert(a['a']);数据存放的地址,只有在新实例化的时候才会变动,其他时候都是引用地址
var b={};
b=a; //这是引用
b={"a":1}; //重新赋值就不是引用了
alert(a['a']); //弹出0//如果这样
b = a;
b.a = 2;
alert(a['a']); //弹出2
b={"a":1};你操作了b变量指向的对象,因为都指向那个同一个对象。
alert(a['a']);会弹1
你可以自己定义一个复制的方法,百度搜一下一大把
或者把对象转换成字符串再解析成json,变相复制过来了~b=$.parseJSON(JSON.stringify(a))
var result = {};
for (var name in obj){
result[name] = obj[name];
}
return result;
}
赋值的时候把里面a的指针传了过去,所以b['a']的改变也改变了a['a']