【发布时间】:2017-05-12 01:31:52
【问题描述】:
这是我的代码:
let testp = {
value: ''
}
let data = [];
for (let i = 0; i < 5; i++) {
testp.value = i;
data.push(testp);
}
console.log(data)
返回的数据是:
[ { value: 4 },
{ value: 4 },
{ value: 4 },
{ value: 4 },
{ value: 4 } ]
为什么?我认为结果是这样的:
[ { value: 0 },
{ value: 1 },
{ value: 2 },
{ value: 3 },
{ value: 4 } ]
【问题讨论】:
-
在循环内分配 testp.value 导致了问题
-
testp是对 javascript 对象的引用;当您调用data.push(testp)时,您只是向数组中添加了对同一对象的另一个引用。不是对象当前状态的副本 -
每个值都会得到
4,因为 JavaScript 通过引用而不是值传递对象。因此,您在循环的每次迭代中修改同一个对象,而不是不同的对象。 -
@fubar——嗯,它实际上总是按值,只是对于对象(或non-primitives),变量所持有的值是一个引用。
标签: javascript