bbr*_*ame 3 javascript console webkit google-chrome
在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);
}
Run Code Online (Sandbox Code Playgroud)
我在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);
}
Run Code Online (Sandbox Code Playgroud)
这似乎不是想要的行为.
这是因为console.log是通过引用和异步,并且push()在结果显示之前最终执行.
你可以快点:
console.log(myArray.slice());
Run Code Online (Sandbox Code Playgroud)
相反,出于调试目的.
为了更明显地测试这个:
var a = []; console.log(a); a.push(1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)
会给[1, 2, 3, 4, 5].
var a = []; console.log(a); setTimeout(function() {a.push(1, 2, 3, 4, 5);}, t);
Run Code Online (Sandbox Code Playgroud)
t = 5给出错误的结果,t = 100得到正确的结果.
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |