带有数组赋值的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最终执行时,而不是在调用它时,传递给console.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);
将给出CCD_ 3。
var a = []; console.log(a); setTimeout(function() {a.push(1, 2, 3, 4, 5);}, t);
给出了t=5的错误结果和t=100的正确结果。
相关文章:
- 控制台返回var不是't定义,但它是
- 分析高度属性时出现意外值{{specs.height}}.index.html
- 铬:“;未捕获的语法错误:意外的标记:"
- Javascript未捕获语法错误意外的标识符错误
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 未捕获的语法错误:意外的标记{
- "未捕获的语法错误:意外的标记}"
- JSON分析错误:Java中AJAX、Javascript和Servlet的意外EOF
- 如何使用Protractor从Chrome控制台获取所有日志
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- JavaScript:控制台的意外输出.log('str' + int + int)
- 未捕获的语法错误:意外的令牌实例(使用 Chrome Javascript 控制台)
- 将变量打印到控制台时出现意外字符串:[对象窗口]
- 函数/设置间隔意外记录两次到控制台
- 使用 AJAX 的函数抛出“意外令牌 }”,Chrome 控制台
- 带有数组赋值的Javascript意外控制台输出;
- 未捕获的SyntaxError:意外令牌非法控制台
- Javascript控制台返回意外的令牌else
- Javascript "意外标识"在chrome web控制台
- NodeJS控制台SyntaxError:生成器的意外令牌*