javascript或firefox中的console.dir()是异步的
Is console.dir() in javascript or firefox asynchronous?
一个非常奇怪的问题。
在调试过程中,我发现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
- esri javascript异步打印
- JavaScript异步问题
- $translateProvider.useStaticFilesLoader的Angular Translate异步定
- 异步facebook功能
- 异步并行错误
- 在Redux中,我应该在哪里编写复杂的异步流
- 角度异步http自动完成
- 如何从SeleniumWebdriver获取异步Javascript响应
- 如何使用异步调用更改工厂的变量
- 在等待异步任务时永久循环
- 如何在异步函数中使用javascript对象
- 调用后不异步Ajax忽略函数
- learnyounode#9杂耍异步
- 异步获取数据使用JavaScript同步获取数据
- Meteor:异步回调问题
- 如何以异步方式打印q中的项目
- javascript函数中的异步与同步.(Node.js)
- Fresh Spark Install+Homestead上的Vue异步堆栈跟踪错误
- Meteor:异步函数回调异常:onAfterAction
- javascript或firefox中的console.dir()是异步的