可能重复:
Is Chrome's JavaScript console lazy about evaluating arrays?
Chrome的js控制台在删除值之前显示一个已删除值的数组。为什么呢?
jsFiddle that demonstrates this behavior
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"]
答案 0 :(得分:6)
Chrome中console.log
被“延迟”;在这种情况下,我相信程序的结尾。
也就是说,在Chrome中,console.log
不会立即对输入对象进行字符串化,而是在“一段时间后”执行字符串化(在此情况下对象已被修改)但在实际显示结果之前
console.log(JSON.stringify(list))
会显示预期结果。
这被报告为错误as far back as Chrome 5(错误修复目标是Mstone-22,所以不是Chrome 20/21?)并且修复已添加到webkit基地:
截至今天,将对象(数组)转储到控制台将导致在控制台对象扩展(即懒惰)时读取对象的属性。这意味着在使用控制台进行调整时转储同一个对象将很难调试。
此更改开始在记录时生成对象/数组的缩写预览,并将此信息传递到前端。这只发生在前端已经打开时,它只适用于console.log(),而不适用于实时控制台交互。