为什么改变一个已经推送到数组中的对象也会改变数组中的值呢?

Why does changing an object you've already pushed to an array change the value in the array as well?

本文关键字:数组 改变 对象 一个 为什么      更新时间:2023-09-26

检查此代码:

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进行更改时,它会反映在数组的第一个元素中。