【发布时间】:2018-02-12 22:07:55
【问题描述】:
我创建多个对象并将它们推送到数组objArr:
var objArr = [];
var obj = {};
var height = [9,8,7,3,6,5,2,4];
for (var i = 0; i < 8; i++) {
debugger;
var mountainH = height[i];
obj.h = mountainH;
obj.index = i;
objArr.push(obj);
}
for (var i = 0; i < objArr.length; i++) {
alert(objArr[i].h);
}
但正如您所见,每个对象都有相同的值。为什么?
【问题讨论】:
-
因为你不是在创建一堆对象,只是一遍又一遍地修改同一个对象。
-
因为您在每次推送时重复使用相同的
obj。因此,每次您通过执行obj.h = ...对其进行变异时,它也会更改所有先前推送的内容。尝试在循环内创建对象。 -
值更新是通过引用。
-
您不应该使用带有静态数字的 for 循环。如果数组更改,则必须对其进行修改。使用
height.length避免无意义的问题
标签: javascript