为什么console.log显示不正确的对象值?

雅鲁

我什至在介绍这些数字之前console.log还不明白为什么其中d1包含显示内容[100,200,300]常规for loop显示d1正确的内部虽然。有人可以解释一下console.logGoogle Chrome中的这种行为/错误吗?https://jsfiddle.net/ZSvyt/

var container = {};
container["0"] = [10, 20, 30];
var d1 = container;

console.log('before console.log');
console.log(d1); // <--- IT DISPLAYS [100, 200, 300]. WHY?

// before for loop
console.log('before for loop');
for (var i = 0; i < d1["0"].length; i++) {
    console.log(d1["0"][i]);
}

container["0"] = [100, 200, 300];

console.log('after console.log');
console.log(d1);

// after for loop
console.log('after for loop');
for (var i = 0; i < d1["0"].length; i++) {
    console.log(d1["0"][i]);
}

输出:

before console.log
Object {
    0: Array[3]
}
0: Array[3] 
0: 100
1: 200
2: 300 

before for loop
10
20
30

after console.log
Object {
    0: Array[3]
}
0: Array[3] 
0: 100
1: 200
2: 300

after for loop
100
200
300
奥马尔·埃拉瓦迪(Omar Elawady)

这是因为控制台中的内容dt不是副本的引用

您可以复制对象并记录它(此问题中的代码)。

或者您可以使用记录代表它的字符串JSON.stringify

console.log( JSON.stringify(dt) ); 将其打印为字符串。

同样,如果您正在使用,lodash则可以那时使用console.log(_.cloneDeep(dt))克隆和记录对象内部的正确值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章