谷歌浏览器和火狐浏览器之间的差异

4
我在Google Chrome(14.0.835.186)和Firefox(6.0.2)上运行这个代码片段时得到了不同的结果。有人可以解释一下这种差异吗?行为是由规范确定的吗?在Firefox上我看到了[0][0, 1]等等。而在Chrome上我看到了[0, 1, 2, 3, 4][0, 1, 2, 3, 4][0, 1, 2, 3, 4]等等。我正在使用Mac OS 10.6.8。

看起来这似乎已经被报告为一个 bug:https://bugs.webkit.org/show_bug.cgi?id=35801 - Jacob
为了解决这个问题,你可以这样做:var a = []; console.log(a.join(',')); a[0] = 1; console.log(a.join(',')); - timrwood
3个回答

3
Firefox在这种情况下更加技术上正确,因为它在循环的每个点输出对象的状态,而Chrome显然要等到循环结束才输出每个console.log,但我不知道有标准规范涵盖console主机对象。

请参见此jsFiddle:http://jsfiddle.net/jfriend00/LRGP2/,以证明这只是console.log具有这种奇怪行为的情况。


为什么要点踩?我认为你在这里是不正确的。这是console.log的一种特殊情况,而其他放置在那里的函数不会发生这种情况。请参见此jsFiddle http://jsfiddle.net/jfriend00/LRGP2/,其中循环中有不同的函数,它可以按预期工作。 - jfriend00
是的,我说得太快了。这是一个 console.log 的问题,使得调试更具挑战性。编辑你的回答,我会点赞的。 - Randomblue
我在我的回答中添加了jsFiddle。 - jfriend00

2

您正在记录一个实时对象

尝试下面的代码(fiddle),看看有什么不同:

var i, test = [];

for(i=0; i<5; i++) {
    test.push(i);
    console.log( test.toString() ); // notice .toString() addition
}

顺便说一下,在Opera Dragonfly中也可以看到同样严重的问题——数组甚至可以被点击和展开。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接