繁体   English   中英

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

[英]Why console.log displays incorrect object's values?

在我介绍这些数字之前,我不明白为什么console.log显示d1包含[100,200,300] 常规for loop虽然正确显示了d1内部结构。 有人可以解释一下 Google Chrome 中console.log这种行为/错误吗? 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

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

您可以复制对象并记录它(来自这个问题的代码)。

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

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

此外,如果您正在使用lodash那么您可以使用console.log(_.cloneDeep(dt))克隆并记录当时对象内的正确值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM