Chrome开发者工具中的奇怪的console.log行为

Jam*_*ong 12 javascript google-chrome

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

打开Chrome开发者工具并输入:

var a = [];console.log(a);a.push(1);console.log(a);

你会期望这会输出类似的东西

[]
[1]
Run Code Online (Sandbox Code Playgroud)

但相反,它输出

[1]
[1]
Run Code Online (Sandbox Code Playgroud)

行为是相同的

var a = [];console.log(a);a[0] = 1;console.log(a);

谁能解释这种行为?

在OS X上运行Chrome.在32位Windows 7上运行相同的行为.

编辑:无论语句是否在同一行,行为都是相同的.我只是将它们放在一行上,以便于测试.

var a = [];
console.log(a);
a.push(1);
console.log(a);
Run Code Online (Sandbox Code Playgroud)

在一个文件然后运行它会产生相同的行为.

编辑x 2如果您不想制作要测试的文件, 请参阅:http://jsfiddle.net/9N4A6/.

Poi*_*nty 4

试试这个:

var a = []; console.log(a.toString()); a.push(1); console.log(a.toString());
Run Code Online (Sandbox Code Playgroud)

我敢打赌,这并不是说评估的顺序很奇怪,而是对象到可打印形式的转换发生在语句全部执行之后,此时 Chrome 准备好实际转储日志。