繁体   English   中英

具有数组赋值的Javascript意外控制台输出;

[英]Javascript unexpected console output with array assignment;

在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);
}

这似乎不是想要的行为。

这是因为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得到正确的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM