检查此代码:
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
它会反映在数组的第一个元素中。