我不明白为什么以下代码会产生不同的输出:
第一种算法:
var data = {
l1: 1,
l2: 2,
l3: 3
};
var datas = [];
for (var i = 0; i < 3; i++) {
datas[i] = {}
for (key in data) {
datas[i][key] = data[key]
}
};
delete datas[0].l1
delete datas[1].l2
delete datas[2].l3
console.log(data)
console.log("%j", datas)
输出:
{ l1: 1, l2: 2, l3: 3 }
[{"l2":2,"l3":3},{"l1":1,"l3":3},{"l1":1,"l2":2}]
第二种算法:
var data = {
l1: 1,
l2: 2,
l3: 3
};
var datas = [];
for (var i = 0; i < 3; i++) {
datas[i] = {}
datas[i] = data ;
};
delete datas[0].l1
delete datas[1].l2
delete datas[2].l3
console.log(data)
console.log("%j", datas)
输出:
{}
[{},{},{}]
最佳答案
从第二个块/算法的下面一行:
datas[i]=data
您只是在定义对同一对象
data
的另一个引用(而不是新对象)。因此,从此data
对象删除所有属性后,这些引用将反映该更改。关于javascript - 代码重构后对象为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35043893/