代码: var obj = { a: 123, b: 234, c: 345};
var array = [ ];
var resultObj = { };
for(var i = 0; i < obj.length; i++) {
resultObj.name = obj[i];
array.push(resultObj);
}
得到的结果: 345, 345, 345; 而不是123, 234, 345;
原因: 把对象定义在外面, 始终指向一个地址, 每次赋值都赋值给了同一个地址, 所以最后赋值的会覆盖之前的值;
JS深拷贝解决办法:JS深拷贝
如: var obj = { a: 123, b: 234, c: 345};
var array = [ ];
var resultObj = { };
for(var i = 0; i < obj.length; i++) {
resultObj.name = JSON.parse(JSON.stringify(obj[i]));
array.push(resultObj);
}
结果是123, 234, 345; 这是最简单的深拷贝bug也多,不清楚的可以看这篇: js深拷贝
评论