在 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 中收到 [] 的预期输出。
[EDIT]
当我插入长时间同步睡眠时,问题并没有消失。这让我认为(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);
}
这似乎不是理想的行为。
这是因为console.log
是通过引用和异步的,并且您的push()
在显示结果之前结束执行。
你可以快速做一下:
console.log(myArray.slice());
相反,用于调试目的。
为了更明显地测试这一点:
var a = []; console.log(a); a.push(1, 2, 3, 4, 5);
会给[1, 2, 3, 4, 5]
.
var a = []; console.log(a); setTimeout(function() {a.push(1, 2, 3, 4, 5);}, t);
当 t = 5 时,给出错误的结果;当 t = 100 时,给出正确的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)