此问题已在此处找到答案:
chrome的javascript控制台在评估数组方面懒惰吗((七个答案)
去年关闭。
此代码:
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]
小提琴:http://jsfiddle.net/2kpnv/
为什么呢?
2条答案
按热度按时间bxfogqkk1#
通过
console.log
以异步方式发生。控制台同步接收对对象的引用,但在对象展开之前不会显示对象的属性(在某些情况下,取决于浏览器以及日志发生时是否打开了开发工具)。如果在控制台中检查对象之前对其进行了修改,则显示的数据将具有更新的值。例如,chrome会显示一点
i
在一个框中,当鼠标悬停时,显示:左边的对象值是在记录时拍摄的,下面的值刚刚计算过。
让你知道你在看什么。
在这些情况下,记录的一个技巧是记录单个值:
或json编码对象引用:
h5qlskok2#
重新定义
console.log
这将解决问题。