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

标签 javascript google-chrome console.log

在我引入这些数字之前,我不明白为什么 console.log 显示 d1 包含 [100,200,300]。不过,常规 for 循环 会正确显示 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 的引用,而不是副本。

您可以复制对象并记录它(代码来自this question )。

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

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

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

关于javascript - 为什么 console.log 显示不正确的对象值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30150469/

相关文章:

javascript - 如何在javascript中将带连接的字符串转换为真实字符串?

google-chrome - Google Chrome 扩展程序有什么办法可以增加本地存储空间?

HTML Favicon.ico 不会在 Google Chrome 上显示

python - 无法运行 Chrome selenium "unknown error: cannot process extension #1"

javascript - 使用 JQuery 将数组内容设置为 span 标签的标题

javascript - AngularJS - ' Controller 不是函数 : Seperate controller files

javascript - 在 JavaScript 中检查字符串是否包含数组的任何元素

javascript - 为什么使用 setState(...) 时 console.log 为空?

javascript - Firefox/Chrome 中控制台日志旁边的数字是多少?

javascript - 如何以编程方式打开浏览器的 JavaScript 控制台?