12

Firebug 无疑是一个很棒的 javascript 调试工具;我广泛使用 console.log()。

我想知道我是否可以将特定于 Firebug 的代码留在生产中。最佳做法是什么?评论调试代码?

4

9 回答 9

14

如果您在生产代码中保留 console.log() 调用,那么使用 Internet Explorer 访问该站点的人将遇到 JavaScript 错误。如果这些人配置了额外的调试工具,那么他们将看到令人讨厌的对话框或弹出窗口。

快速搜索显示该线程讨论了检测 Firebug 控制台是否存在的方法:http ://www.nabble.com/Re:-detect-firebug-existance-td19610337.html

于 2009-05-27T12:22:18.883 回答
14

以前被这个咬过。理想情况下,所有 console.log 语句都需要在生产之前删除,但这很容易出错,开发人员总是忘记或只在 FF + Firebug 中进行测试。

如果尚未定义一个虚拟控制台对象,一种可能的解决方案是创建一个虚拟控制台对象。

if( typeof window.console == 'undefined'){
    window.console = {
        log:function(){}
    };
}

提醒一句:Safari 10.4 曾经是这样,任何对 console.log 的调用都会引发安全异常,因为控制台对象是 Mac OS Dashboard 小部件中使用的保留对象。不确定是否是这种情况,今晚将检查。

于 2009-05-27T12:24:04.183 回答
8

不久前,我个人修改了我的压缩器,以去除预压缩的控制台引用。在那里添加一个正则表达式几分钟可以节省一生的麻烦。

于 2009-05-27T12:25:16.240 回答
3

只是想我会为任何 js 调试添加一个非常好的技巧......使用关键字“调试器”,它就像代码中的断点,萤火虫也检测到它,MSIE(如果你有 Visual Studio)也检测到它,就像我一样说它是一个断点。

似乎没有多少人知道这一点,但我发现它非常宝贵......而且如果运行代码的机器上没有安装调试器,则不会发生任何事情并且代码可以正常运行。虽然我不建议把它们留在那儿。

于 2009-05-27T12:36:43.440 回答
2

我为此而头疼过很多次。

我经常使用console.log(),直到最近,发现它会导致整个JS代码在不使用firebug的FF版本中失败。

我通常在上线之前运行一个查找,然后将其注释掉。

D

于 2009-05-27T12:21:01.587 回答
2

一些压缩器会去掉任何前缀为 ;;; 的行。(这是一个合法的序列,是三个空语句。)这样你就不会严格限于控制台引用(即你可以做一些计算,然后 console.log() 最后的结果,压缩器可以把它们都去掉。)我为此使用JavaScript::Minifier

于 2009-05-27T13:12:14.337 回答
1

我在 OOP Javascript 中使用它,为检查萤火虫是否存在的日志制作自己的包装器:

myclass.prototype.log = function()
{ 
    if( typeof window.console != 'undefined' )
    {
        console.log.apply( null, arguments ); 
    }
}

只需致电:

this.log( arg1, arg2, ...)
于 2009-08-18T08:19:37.163 回答
0

您可以尝试JavaScript Debug,它是 console.log http://benalman.com/projects/javascript-debug-console-log/的简单包装器

于 2010-05-23T16:05:49.457 回答
0

只是提醒一下,IE 开发工具不支持 console.log 上的 apply()。

当开发工具处于活动状态时,调用 console.log.apply() 将在 IE8 中引发异常。

于 2009-12-24T08:58:27.883 回答