我将代码分解为简化的jsFiddle。问题是属性is
仅为一个对象设置,但最后每个对象都获得最后一次迭代的值(在这种情况下,它是false
但id05
应该是{ {1}})。为什么?我忽视了什么吗?
jsFiddle(请参阅控制台中)
true
答案 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
,但这只会生成浅层克隆(仅克隆顶级属性)