7

一个很奇怪的问题。

在我的调试中,我发现 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() 是异步的,对吧?!

我的环境:Windows7、Firefox 6.0.2、firebug 1.9.1、javascript lib 是 DOJO(但我认为与它无关。)

谢谢。

4

4 回答 4

2

最重要的事情console.dir (至少在 Chrome 中,根据我的经验和this判断)是扩展评估并显示对象的当前值,在您进行扩展时,而不是在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。

它不应该是一个错误,它肯定是一个性能问题(对象可能非常大),但行为很奇怪,并且可能令人困惑。

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

于 2013-02-23T15:23:53.470 回答
0

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

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

Firebug 中的结果:

b: Object { c= 1 }

Chrome 中的结果:

b: Object
    c: 1
于 2012-09-21T10:00:37.190 回答
0

简而言之,是的。:)

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

于 2012-03-13T10:30:11.373 回答
0

控制台日志有时会出现这样的错误。它在 Internet Explorer(查找错误的常见地方)中的功能也较弱,无法打印对象和 XML 文档之类的内容。

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

于 2012-03-13T12:50:20.113 回答