我试图用一个对象列表填充数组.
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);
Run Code Online (Sandbox Code Playgroud)
我希望在第二次推送之后,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);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |