【问题标题】:How do I dump JavaScript vars in IE8?如何在 IE8 中转储 JavaScript 变量?
【发布时间】:2010-12-29 16:59:26
【问题描述】:

我有一个需要在 IE8 中检查的对象。 我尝试了开发者工具和 console.log,他们的 Firebug 等价物。 但是,当我将对象输出到日志时:

console.log("Element: ", element);
console.log(element);

我只得到字符串

LOG: Element: [object Object]

而不是可点击、可检查的转储。

是否可以像在 Firebug 中一样将对象转储到日志并检查其成员?

我不能使用自制的 dump() 函数,因为我要检查的元素太大,浏览器会崩溃。

【问题讨论】:

  • 遗憾的是 IE9 也是如此。诅咒你微软!

标签: javascript internet-explorer-8 console firebug ie-developer-tools


【解决方案1】:

console.log(element.toString()) 可能是你的朋友...

【讨论】:

  • 我认为这不值得一票否决 - 它工作得非常好,只是不是我需要的方式。应为公然错误的答案保留反对票。 +1 以平衡它。
  • .toString() 是解释器在您尝试输出对象时调用的内容。所以基本上 console.log(element) 和 console.log(element.tostring()) 是一样的
  • 好吧,对于日期、函数和数组,它可以工作。例如 "new Date().toString()" "new Date().toString.toString()" "[0, 1, 2].toString()" (没有 .toString() 它显示 "{... }") (console.log 不是必需的)
【解决方案2】:

这是我发现有用的一种技术:

  • 打开开发者工具栏(按 F12)
  • 转到“脚本”标签
  • 点击“开始调试”按钮
  • 接下来,在控制台中输入“debugger”并回车。这应该会触发一个断点。
  • 转到“观看”子选项卡
  • 单击“单击以添加...”行并输入您要检查的变量。请注意,该变量必须是全局可用的。
  • 此时您应该能够使用树状 UI 检查您的变量
  • 完成调试后,单击继续按钮(或按 F5)

【讨论】:

  • 我现在没有时间讨论这个,但我很确定它会对我有所帮助。感谢您的分步指导。
  • 我敢打赌微软开发人员讨厌这个。
  • 可以编写调试器;直接进入js代码。 stackoverflow.com/questions/1306232/…
  • 它只是暴露对象的好方法,它是学习其他一些我通常不使用的东西的好方法
  • @Xavi:您的图片网址已损坏。
【解决方案3】:

有点离题(因为它不适用于 DOM 元素),但我发现使用 JSON.stringify(object 很方便)为对象获取一个可读性很强的 JSON 字符串。

【讨论】:

  • 这个解决方案是对这个问题的更好回应。顺便说一句,如果你的 IE 不支持 JSON 对象,你可以使用 JSON.org/json2.js 这是一个不错的后备
  • 请注意,如果您尝试将此技术用于非常大的变量(例如 jquery 对象),您可能会遇到“错误:内存不足”。
  • PROTIP:使用JSON.stringify(obj, null, "\t") 使stringify 的输出更具可读性。
  • 你也可以使用console.dir();在 ie 中实现这种行为。
  • @Chris 哇,很棒的提示!效果很好!我必须让其他人知道你的好建议,所以我用该信息添加了一个答案。希望你没事。 :-)
【解决方案4】:

一个建议是使用Firebug-Lite: 它包装了控制台 obj,您可以像在大多数萤火虫控制台中一样在 IE 中看到结果。 希望对您有所帮助。

【讨论】:

  • 1) 如何在 IE 和其他浏览器上安装和使用 firebug-lite:makeuseof.com/tag/… 2) 关于如何规避 IE 中 firebug-lite 书签问题的视频:youtube.com/watch?v=vLJ2RaNZ22E
  • 已安装 firebug-lite,但“控制台未定义”是我收到的错误消息。尝试谷歌搜索答案,但还没有运气。如果有人知道如何解决这个问题,请在这里回复。
【解决方案5】:

如果您正在处理讨厌的代码并且 console.log 不可用,请在控制台中尝试:

out = []; for (i in your_object) { out.push(i) } out.join("\n")

【讨论】:

    【解决方案6】:

    @Chris 用简单的解决方案评论了@Andy 的答案:使用console.dir(myObj) 在 IE 的控制台中打印出所有详细信息。谢谢克里斯!

    【讨论】:

    • 是的,没关系^^ 够愚蠢的,我没有发布答案。我认为这里有足够好的东西。
    • console.dir 在 IE8 中不可用 :(
    • 另外.. console.dir 不做深度序列化... JSON.stringify 做
    • 嗯...在 IE10 console.dir(obj) 中仅输出 "[object Object]"。在 IE 9 模式下它可以工作。谢谢微软...
    【解决方案7】:

    我知道这是一个非常古老的问题,但我刚才正在寻找这个问题的答案。如果不是绝对要求使用 IE 控制台(这不是很好,IMO),那么您可以考虑使用 Firebug Lite (http://getfirebug.com/firebuglite)。这不是一个完美的解决方案,您可能不想将该脚本推送到您的生产环境中,而且它的功能不如 Firebug,但是当您需要使用低端浏览器时,它非常好用即。

    【讨论】:

    • 如果IE不是必需的,那么就没有问题。内置的 chrome/firefox 开发工具可以很好地做到这一点。
    【解决方案8】:

    有点笨重,但它适用于 DOM 对象:

     console.log( testNode.outerHTML.replace(testNode.innerHTML,"") ); 
    

    【讨论】:

      【解决方案9】:

      在您的页面中添加此标签:

      <script type="text/javascript" src="https://getfirebug.com/firebug-lite-debug.js"></script>

      一切都会奏效的。

      它在我的系统上运行。

      注意:请尝试此解决方案。

      【讨论】:

        【解决方案10】:

        将其转储到现有的 HMTL 元素中

        我注意到 IE 11 在 1027 个字符后剥离了控制台行:-/ 当我有一个大对象要转储(12,000 个字符)时,我将它转储到现有的 DIV-oder TextArea-Element 中,我可以从中复制内容。

        var str = JSON.stringify(myObject);
        $('#existing-element').text(str); // jQuery or
        document.querySelector("#existing-element").innerHTML = str; // native JavaScript
        

        【讨论】:

          【解决方案11】:

          哈维出色回答的图片版:

          【讨论】:

            猜你喜欢
            • 2019-12-31
            • 1970-01-01
            • 1970-01-01
            • 2012-01-12
            • 2021-06-22
            • 2014-03-09
            • 1970-01-01
            • 2011-12-01
            • 2013-08-06
            相关资源
            最近更新 更多