array.pop()和console.log()发出奇怪的结果

时间:2013-08-01 18:18:00

标签: javascript

我们说我们有以下代码

var array = [1,2,3,4];
console.log(array);
array.pop();
array.pop();
console.log(array);

输出

[1,2]
[1,2]

为什么2 console.log()相同,为什么第一个显示在它调用后计算的结果?

console.log()功能'延迟' 以某种方式或某种方式?

PS:我使用的是Sencha Touch 2.2.1框架,但据我所知,他们还没有覆盖console.log()。我在safari上运行此代码(最新版本);

2 个答案:

答案 0 :(得分:4)

这是一个众所周知的问题。虽然console.log调用以正确的顺序进行,但是日志记录机制本身是基于引用的,并且在Chrome和基于webkit的系统中经常会导致这种情况。以下是一种解决方法,可以将其从参考值改为值。

var array = [1,2,3,4];
console.log(JSON.stringify(array));
array.pop();
array.pop();
console.log(JSON.stringify(array));

提交的缺陷:https://code.google.com/p/chromium/issues/detail?id=50316

答案 1 :(得分:0)

您使用的是哪种环境?如果您在Nodejs中执行是异步的,那么它是可能的。在浏览器控制台中,这不应该发生。事实上,我使用Chrome和FF进行了测试,我得到了两种情况

var array = [1,2,3,4];

console.log(array);

array.pop(); array.pop();

console.log(array);
[1, 2, 3, 4]
[1, 2]
undefined

哪个是正确的。