javascript - 为什么将对象插入数组会修改数组中不需要的部分?

标签 javascript

我正在尝试用对象列表填充一个数组。

  var testarray=[];
  var temp={};

  temp.data = 10;
  temp.data2= 11;
  testarray.push(temp);
  console.log("After first push:");
  console.log(testarray[0].data);
  console.log(testarray[0].data2);

  temp.data = 20;
  temp.data2 = 21;
  testarray.push(temp);
  console.log("After second push:");
  console.log(testarray[0].data);
  console.log(testarray[0].data2);
  console.log(testarray[1].data);
  console.log(testarray[1].data2);

我希望在第二次推送之后,testarray 将包含值 第一个数组元素为 10 和 11,以及 第二个为 20 和 21。

但实际上,第一个数组元素也包含 20 和 21。因此第二次推送会覆盖第一个数组元素。怎么了?

最佳答案

temp 变量保存对象引用,而您将对象引用推送两次,因此更新一个属性会更改对象属性。

var testarray = [];
var temp = {};

temp.data = 10;
temp.data2 = 11;
testarray.push(temp);
console.log("After first push:");
console.log(testarray[0].data);
console.log(testarray[0].data2);

// update with new object
temp = {};

temp.data = 20;
temp.data2 = 21;
testarray.push(temp);
console.log("After second push:");
console.log(testarray[0].data);
console.log(testarray[0].data2);
console.log(testarray[1].data);
console.log(testarray[1].data2);

关于javascript - 为什么将对象插入数组会修改数组中不需要的部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45511178/

相关文章:

javascript - 在 JavaScript 中实现具有容差的二分搜索?

javascript - Windows Azure 和 JavaScript 多个Where子句

javascript - 获取从 xml 到 xslt 的输入最小值

native 可执行文件的 javascript 解释器

javascript - 期望单值但多值

javascript - 使用带进度指示器的 AJAX 上传图片

javascript - 加载文件夹内容

用于登录 Windows 应用商店应用程序站点的 Javascript

javascript - 如何向express.js 页面添加 Angular ?

javascript - 如何使用onChange()函数进行排序?