javascript或firefox中的console.dir()是异步的

Is console.dir() in javascript or firefox asynchronous?

本文关键字:异步 dir firefox 中的 console javascript      更新时间:2023-09-26

一个非常奇怪的问题。

在调试过程中,我发现console.dir(anArray)没有在浏览器的firebug控制台上输出当前值。

例如,

console.dir(anArray)              //line 1
console.log(anArray[0].prop1)     //line 2
code to change the value of anArray[0].prop1  //line 3

anArray是javascript/json对象的数组,

在Firbug的控制台中,第1行输出在第3行中设置的新值

第2行是旧值,也是我想要的。

唯一的解释是console.dir()是异步的,对吧?!

我的env:Windows7,Firefox 6.0.2,firebug 1.9.1,javascript库是DOJO(但我认为与它无关。)

谢谢。

console.dir(至少在Chrome中,根据我的经验和这一点判断)的重要之处在于,扩展在执行扩展时评估并显示对象的当前值,而不是console.dir()调用时的值。

参见示例

<html><body> open/refresh this with the javascript console open
<script>
 var ar = new Float32Array(1);
 ar[0]=2;   
 console.log(ar[0]);
 console.dir(ar);   
 ar[0]=200; 
</script>

当您在控制台中展开数组时,您会看到值200。

这不应该是一个bug,当然也是一个性能问题(对象可能很大),但行为很奇怪,可能会令人困惑。

此外,我已经测试过,如果值在之后发生更改,控制台不会更新它(因此它在调试器中也不能作为"监视"窗口工作)。

简而言之,是。:)

我过去在Chrome上也遇到过类似的问题,不理解我的控制台结果,但我运行了一些测试,发现这是异步行为。事实上,我最好的选择是它内部使用setTimeout()来延迟日志。console.log似乎也受到了影响。

控制台日志有时会出现这样的错误。它在InternetExplorer(一个常见的查找错误的地方)中的功能也不太强大,因为它无法打印对象和XML文档等内容。

我建议您不要使用console.log,而是尝试学习如何使用浏览器提供的强大调试器。当您在断点上暂停时,您可以检查所有变量,在控制台上运行任意语句,并在堆栈跟踪中上下移动。

这是Firefox和Chrome中的一个错误:运行控制台:

console.log(a = {b: { c: 0}});
a.b.c = 1;

Firebug中的结果:

b: Object { c= 1 }

Chrome中的结果:

b: Object
    c: 1