javascript - 对象和 console.log 的奇怪行为

标签 javascript google-chrome object

这段代码:

foo = [{id: 1},{id: 2},{id: 3},{id: 4}, {id: 5}, ];
console.log('foo1', foo, foo.length);
foo.splice(2, 1);
console.log('foo2', foo, foo.length);

在 Chrome 中生成以下输出:

foo1 
[Object, Object, Object, Object, Object]  5
    0: Object
    1: Object
    2: Object
    3: Object
    length: 4
    __proto__: Array[0]
     5 (index):23
foo2 
[Object, Object, Object, Object]  4
    0: Object
    1: Object
    2: Object
    3: Object
    length: 4
    __proto__: Array[0]

fiddle :http://jsfiddle.net/2kpnV/

这是为什么?

最佳答案

通过 console.log 检查对象以异步方式发生。控制台同步接收对对象的引用,但在展开之前不会显示对象的属性(在某些情况下,取决于浏览器以及日志发生时您是否打开了开发工具)。如果对象在控制台中检查之前已被修改,则显示的数据将具有更新后的值。

例如,Chrome 会在一个框中显示一个小的 i,当鼠标悬停时,它会显示:

Object value at left was snapshotted when logged, value below was evaluated just now.

让你知道你在看什么。

在这些情况下记录的一个技巧是记录各个值:

console.log(obj.foo, obj.bar, obj.baz);

或者JSON编码对象引用:

console.log(JSON.stringify(obj));

关于javascript - 对象和 console.log 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23429203/

相关文章:

javascript - 无法通过 jQuery 获取要显示的 JSON 属性

javascript - js中动态多对象属性名称的问题

javascript - 使用 `angular.copy ` 设置模型 - 有什么好处?

javascript - 使用 Chart.js 时隐藏 xAxis 标签

css - Flexbox 列中的图像无法在 Chrome 中正确呈现

python - Ubuntu:selenium.common.exceptions: session 未创建:此版本的 ChromeDriver 仅支持 Chrome 版本 79

c# - WPF 数据绑定(bind) : database or objects?

javascript - src 中的路径以到达不同目录中的文件

javascript - 如何判断数组是否包含另一个特定数组,而不仅仅是其元素?

即使有前缀,Chrome 和 Safari 上的 CSS 问题