【发布时间】:2012-02-18 18:30:11
【问题描述】:
在 webkit 浏览器(Chrome 16.0.912.77 和 Safari 5.1.2 - 7534.52.7)中分配数组后,我得到了意外的控制台输出。
这是我演示错误的函数:
function test() {
var myArray = [];
console.log(myArray); // Should be [], but is [0]
myArray.push(0);
}
我在 Firefox 7.0.1 中收到 [] 的预期输出。
[编辑]
当我插入一个长同步睡眠时,问题并没有消失。这让我觉得(1)即使 console.log 语句是异步的,它也在同一个线程中运行,(2)它在运行之前一直等到事件队列为空,以及(3)传递给控制台的引用当 console.log 最终执行时,.log 被转换为字符串 - 而不是在调用它时。
function sleep(millis){
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}
function test() {
var myArray = [];
console.log(myArray); // Should be [], but is [0]
sleep(2000);
myArray.push(0);
}
这似乎不是理想的行为。
【问题讨论】:
-
你确定这不仅仅是一个命名的东西,它是一个大小为 0 的数组吗?您是否尝试过在 webkit 浏览器中访问 myArray[0]?
-
关于您的编辑,请参阅可能的重复问题。在代码完成时评估结果。所以没有同步等待。请改用
.concat()或.join()。
标签: javascript google-chrome webkit console