【问题标题】:Synchronous console logging in ChromeChrome 中的同步控制台日志记录
【发布时间】:2012-04-19 21:59:33
【问题描述】:

是否可以同步记录到控制台?我经常遇到代码执行比转储结构更快的情况。这解决了输出已更改的对象。

我当然可以使用调试器浏览代码,进行单元测试等,只是简单地console.log 东西只是为了大致了解正在发生的事情通常很方便。

【问题讨论】:

    标签: javascript google-chrome logging webkit


    【解决方案1】:

    您可以在将对象传递给console.log 之前创建对象的副本。在 here 中查找用于创建对象的深层副本的函数。

    编辑:

    现已在 Chrome 中实现,请参阅 here

    【讨论】:

    • 好的,谢谢,这听起来可行。虽然我更愿意以某种方式覆盖原始控制台转储,但它是阻塞而不是异步的。
    • 问题是对象是通过引用传递给控制台的,如果你以后更改对象,控制台中的输出也会改变。
    • 哦,我明白了...我认为它确实会自己拍摄快照。在那种情况下,克隆对象似乎是唯一的解决方案。再次感谢。
    • 我在控制台上玩了一点,它似乎是通过引用传递的,如果你“打开”对象,值会被评估并保持不变。
    • 看来你是对的。该控制台所做的是我真的不喜欢的一种病态行为。我想不出任何情况这会有所帮助或预期。只是看起来很傻。那好吧。谢谢,我想我将不得不使用自定义包装器和克隆。
    【解决方案2】:

    我刚刚被这种行为抓住了,花了几个小时才意识到控制台很糟糕,而不是我的代码。该死的。

    到目前为止,我只能通过以下方式获得预期的行为:

    console.log(JSON.stringify(obj))
    

    很好的副作用是,它扩展了 {0: "a", 3: "b"} 之类的对象

    【讨论】:

    • 哦,这实际上很好地解决了所有问题。谢谢你:)
    【解决方案3】:

    在 console.log 语句中放置一个断点(见下图)并使用控件跳转到下一个。

    【讨论】:

    • 谢谢,但我知道我可以使用调试器浏览代码。我什至在最初的问题中已经说过了。
    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2011-10-11
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多