Chrome开发者工具中奇怪的console.log行为
可能重复:
Chrome的JavaScript控制台懒惰评估数组?
打开Chrome开发者工具并input:
var a = [];console.log(a);a.push(1);console.log(a);
你会期望这会输出类似的东西
[] [1]
但是,它输出
[1] [1]
行为是一样的
var a = [];console.log(a);a[0] = 1;console.log(a);
任何人都可以解释此行为?
在OS X上运行Chrome。在32位Windows 7上具有相同的行为。
编辑 :行为是相同的,不pipe这些语句是否在同一行上。 我只是简单地将它们提供在一条线上,以便于testing。
把
var a = []; console.log(a); a.push(1); console.log(a);
在一个文件然后运行它产生相同的行为。
编辑x 2请参阅: http : //jsfiddle.net/9N4A6/如果你不想做一个文件来testing。
试试这个:
var a = []; console.log(a.toString()); a.push(1); console.log(a.toString());
我敢打赌,这并不是说评估的顺序是奇怪的,而是在将所有对象转换为可打印的forms之后,才会在执行完所有语句之后,才能真正转储出日志。
与x64机器上的Win7一样的行为。 我的猜测是,日志方法持有一个引用,并排队恰好在一行中的调用。
编辑这不是一个单独的Chrome / Ium问题,我见证了与Firebug相同。 正如我所说的控制台日志logging必须在某些方面排队。
至less在数组中,可以为每个日志调用克隆数组:
var a = [];console.log([].concat(a));a.push(1);console.log([].concat(a));
对于对象,我推荐JSON:
var a = {};console.log(JSON.stringify(a));a[0]=1;console.log(JSON.stringify(a));
什么是“logging”是对象“a”…不是“a”的纯文本表示。 日志显示足够聪明,可以显示对象“a”的占位符,“稍后”会填充/填充对象(好像在事件调用结束时)。 如果你坚持一个alert()语句,你会看到你期望的值(logging值被“填充”):
var a = []; console.log(a); alert('force console to display correctly'); a.push(1); console.log(a);
这似乎像Chrome中的一个错误(有点高飞不得不把警报声明在看到正确的日志信息)。
(注意这个问题显示在谷歌search“console.log chrome只显示当前值”的顶部,所以我想我会添加我的答案)
是的,它也是在对象上做的….如果你稍后改变它的值(比如几秒钟后),然后在控制台中展开这个对象,那么新的值就会在那里。 奇怪的,但在某种意义上可以是有用的。
如果你想要当前值,只要说“console.log(a.toString());” 或类似的。