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

nop*_*ole 5 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);
Run Code Online (Sandbox Code Playgroud)

将会呈现

[1, undefined × 2] 
[1, undefined × 2] 
5 
[1, undefined × 1] 
Run Code Online (Sandbox Code Playgroud)

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

nop*_*ole 1

这是由于排队console.log处理,因此打印被延迟,并且显示了对象或数组的更高版本:Chrome's JavaScript console是否懒于评估数组?

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