Javascript最佳实践:处理特定于Firebug的代码

Javascript最佳实践:处理特定于Firebug的代码,javascript,jquery,firebug,Javascript,Jquery,Firebug,Firebug无疑是javascript调试的绝佳工具;我广泛使用console.log() 我想知道是否可以将特定于Firebug的代码留在生产中。 最佳做法是什么?注释调试代码 我为此头痛了很多次 我经常使用console.log(),直到最近,我才发现在不使用firebug的FF版本中,它会导致整个JS代码失败 在上线之前,我通常会运行一个查找,并对其进行评论 D如果在生产代码中保留console.log()调用,那么使用Internet Explorer访问站点的用户将出现JavaScr

Firebug无疑是javascript调试的绝佳工具;我广泛使用console.log()

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

我为此头痛了很多次

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

在上线之前,我通常会运行一个查找,并对其进行评论

D

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


快速搜索显示,这条讨论检测Firebug控制台是否存在的方法的帖子:

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

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

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

警告一句:10.4版本的Safari过去的情况是,任何对console.log的调用都会引发安全异常,因为console对象是Mac OS Dashboard小部件中使用的保留对象。我不确定情况是否如此,今晚将进行检查。

我个人在前一段时间修改了我的压缩机,去掉了控制台引用预压缩。在那里添加一个正则表达式只需几分钟就可以省去一辈子的麻烦。

我只是想为任何js调试添加一个非常好的技巧。。。。使用关键字“debugger”,就像代码中的断点一样,firebug会检测到它,MSIE(如果您有visual studio)也会检测到它,正如我所说的,它是一个断点


似乎没有多少人知道这一点,但我发现这是不可信的。。。此外,如果运行代码的计算机上没有安装调试器,则不会发生任何事情,代码也会正常运行。尽管我不建议把它们留在那里。

有些压缩器会去掉前缀为;;的行;;;(这是一个合法的序列,有三个空语句。)这样,您就不必严格限制控制台引用(也就是说,您可以进行一些计算,然后console.log()将结果放在最后,压缩器可以去掉所有结果。)我使用它。

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

myclass.prototype.log = function()
{ 
    if( typeof window.console != 'undefined' )
    {
        console.log.apply( null, arguments ); 
    }
}
只要打电话:

this.log( arg1, arg2, ...)

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


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

您可以尝试JavaScript调试,它是console.log的简单包装

Safari的最新10.5版本实际上在其web开发工具中使用了console.log()API,因此如果您支持最新版本,这可能不是问题。公平地说,他们不会让它损坏太久。一般来说,这是危险的,因为这会将代码视为文本而不是代码,因此
var a=console;a、 日志(“测试”)仍将抛出错误。当然,不太可能有这样的参考,但由于存在更好的解决方案(见上文),这样做似乎是不明智的。