检查验证码:为什么更改已经推送到数组的对象也会更改数组中的值?
var bbb = [];
var aaa = {};
aaa.test = "1";
bbb.push(aaa);
console.log(bbb[0].test);
aaa.test = "2";
bbb.push(aaa);
console.log(bbb[0].test);
为什么将控制台输出为 “1,2”?我认为它应该是“1,1”。
检查验证码:为什么更改已经推送到数组的对象也会更改数组中的值?
var bbb = [];
var aaa = {};
aaa.test = "1";
bbb.push(aaa);
console.log(bbb[0].test);
aaa.test = "2";
bbb.push(aaa);
console.log(bbb[0].test);
为什么将控制台输出为 “1,2”?我认为它应该是“1,1”。
通过引用将对象添加到数组中。因此,当您执行bbb[0]
时,它指的是您先前创建并修改的aaa
的实例。
如果您不想要这种行为,则需要在添加对象之前克隆该对象。
bbb.push(clone(aaa))
至于clone()
实施,如果您有jQuery的:
function clone(obj) {
return jQuery.extend({}, obj);
}
而且没有jQuery的:
function clone(obj) {
return JSON.parse(JSON.stringify(obj));
}
你将一个aaa
的引用传递给数组。所以当你改变aaa
时,它会反映在数组的第一个元素中。
我怎样才能使控制台输出为“1,1”? – user1371699 2013-05-05 20:47:44
看到编辑原来的答案 – xbonez 2013-05-05 20:48:23
非常感谢!!!!! – user1371699 2013-05-05 20:53:30