5

可能重复:
Chrome 的 JavaScript 控制台是否懒于评估数组?

Chrome 的 js 控制台在删除值之前显示一个包含已删除值的数组。为什么?

jsFiddle 演示了这种行为

var list=[];
list.push("one");
list.push("two");
list.push("three");
console.log(list);                        //["two", "three", undefined × 1] 
$("#output").append(JSON.stringify(list));//["one","two","three"]

list.shift();

$("#output").append($("<br>"));

console.log(list);                        //["two", "three"] 
$("#output").append(JSON.stringify(list));//["two","three"]

​</p>

4

1 回答 1

6

在 Chromeconsole.log中是“延迟的”;在这种情况下,我相信该计划的结束。

也就是说,在 Chrome 中,console.log 不会立即对输入对象进行字符串化,而是在“一段时间后”执行字符串化(在这种情况下,对象已被修改)但在实际显示结果之前,

console.log(JSON.stringify(list))将显示预期的结果。


这早在 Chrome 5 就被报告为一个错误(错误修复目标是 Mstone-22,所以不是 Chrome 20/21?)并且已经在webkit基础中添加了一个修复:

到今天为止,将对象(数组)转储到控制台将导致对象的属性在控制台对象扩展时被读取(即延迟)。这意味着在改变它的同时转储同一个对象将很难使用控制台进行调试。

此更改在记录对象/数组时开始生成简短预览,并将此信息传递到前端。这仅在前端已经打开时发生,它仅适用于 console.log(),不适用于实时控制台交互。

于 2012-10-09T03:21:53.570 回答