Javascript数组删除或弹出导致与console.log的竞争条件?

时间:2012-10-07 08:07:15

标签: javascript

在当前的Google Chrome(版本22.0.1229.79,在带有Mountain Lion的iMac上),以下代码

var arr = [1, 3, 5];
console.log(arr);

delete arr[1];
console.log(arr);

console.log(arr.pop());
console.log(arr);

将显示

[1, undefined × 2] 
[1, undefined × 2] 
5 
[1, undefined × 1] 

还有其他情况导致Firefox的行为也相似。它们是Chrome和Firefox上的漏洞 - 但Firefox和Chrome都容易受到类似错误的影响似乎很奇怪 - 或者它是否有阵列删除和console.log的行为?据推测,console.log不应该在单独的线程上运行。

2 个答案:

答案 0 :(得分:1)

在Firefox 7.0中:

var arr = [1,3,5];

console.log(delete arr [1]); // 将显示[1,undefined,5]

在我看来,这是一个正确的行为=)所以可能只是一个错误。

答案 1 :(得分:1)

这是由于排队console.log处理,因此打印延迟,并显示对象或数组的更高版本:Is Chrome's JavaScript console lazy about evaluating arrays?

我的答案有5个解决方案,JSON.stringify()是最好的解决方案。