嵌套for循环覆盖对象属性

时间:2015-05-15 09:21:17

标签: javascript

我将代码分解为简化的jsFiddle。问题是属性is仅为一个对象设置,但最后每个对象都获得最后一次迭代的值(在这种情况下,它是falseid05应该是{ {1}})。为什么?我忽视了什么吗?

jsFiddle(请参阅控制台中)

true

1 个答案:

答案 0 :(得分:6)

tmp[id + i] = reminder[id];将复制对象的引用,而不是克隆对象本身。

考虑一下:

var a = { a: [] }; 
var b = a.a; 
b.push(1);
console.log(a.a); // [1]

这意味着您的所有对象都是相同的,并且它们共享相同的属性(tmp.id05 === tmp.id06等...)

tmp.id00.__my_secret_value__ = 1234;
console.log(tmp.id09.__my_secret_value__); // 1234

要在JavaScript中克隆对象,您可以使用Object.create,但这只会生成浅层克隆(仅克隆顶级属性)