检查此代码:
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”。
答案 0 :(得分:2)
通过引用将对象添加到数组中。因此,当您执行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));
}
<强> Demo 强>
答案 1 :(得分:0)
您将aaa
的引用传递给数组。因此,当您对aaa
进行更改时,它会反映在数组的第一个元素中。