【问题标题】:Is console.dir() in javascript or firefox asynchronous?javascript 或 firefox 中的 console.dir() 是异步的吗?
【发布时间】:2012-03-29 18:01:42
【问题描述】:

一个非常奇怪的问题。

在我的调试中,发现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(但我认为与它无关。)

谢谢。

【问题讨论】:

    标签: javascript asynchronous console firebug dir


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      Firebug 中的结果:

      b: Object { c= 1 }
      

      Chrome 中的结果:

      b: Object
          c: 1
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          简而言之,是的。 :)

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

          【讨论】:

            猜你喜欢
            • 2011-07-21
            • 2016-08-13
            • 2016-08-03
            • 1970-01-01
            • 1970-01-01
            • 2017-02-10
            • 2019-07-04
            • 1970-01-01
            相关资源
            最近更新 更多