2

检查此代码:

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”。

4

2 回答 2

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));
}

演示

于 2013-05-05T20:43:28.297 回答
0

您传递aaa对数组的引用。因此,当您对其进行更改时,aaa它会反映在数组的第一个元素中。

于 2013-05-05T20:43:47.983 回答