JavaScript最佳实践:处理Firebug特定代码

12

Firebug是一款非常出色的JavaScript调试工具;我广泛使用console.log()。

我想知道是否可以在生产环境中保留Firebug特定的代码。什么是最佳实践?注释调试代码?

9个回答

14

我之前也遇到过这个问题。理想情况下,在生产环境中应该删除所有的console.log语句,但是这种方法容易出错,开发人员往往会忘记或仅在FF + Firebug中进行测试。

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

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

需要注意的一点是:在Safari 10.4中,对console.log的任何调用都会抛出安全异常,因为console对象是Mac OS Dashboard小部件中使用的保留对象。不确定现在是否仍然是这种情况,今晚会检查一下。


Safari最新的10.5版本实际上在其Web开发工具中使用console.log() API,因此如果您支持最近的版本,则可能不会出现问题。 - ajm
好吧,我想他们不会让它坏太久的。 - Gareth Davis

14
如果你在生产代码中保留了console.log()调用,则使用Internet Explorer访问网站的人将出现JavaScript错误。如果这些人配置了额外的调试工具,则他们将看到令人讨厌的对话框或弹出窗口。
快速搜索显示了这个线程,讨论如何检测Firebug控制台是否存在:http://www.nabble.com/Re:-detect-firebug-existance-td19610337.html

8

个人而言,我一段时间前修改了我的压缩程序,以便在预压缩时剥离掉控制台引用。只需花费几分钟添加一个正则表达式就可以节省大量的麻烦。


一般来说,这是很危险的,因为它将代码视为“文本”,而不是代码,因此 var a = console;a.log("test"); 仍然会抛出错误。当然,不太可能会出现任何这样的引用,但由于存在更好的解决方案(请参见上文),因此这似乎是不明智的做法。 - David Mulder

3

我想添加一个对任何JS调试非常有用的技巧……使用关键字“debugger”,它就像是代码中的断点。Firebug可以检测到它,MSIE(如果您有Visual Studio)也可以检测到它,并且如我所说,它是一个断点。

不多人知道这个技巧,但我发现它非常宝贵……而且,如果在运行代码的机器上没有安装调试器,什么都不会发生,代码将正常执行。虽然我不建议把这些保留在代码里。


2

这个问题曾经让我头痛不已。

我经常使用console.log(),但最近发现在没有安装firebug的FF版本中,它会导致整个JS代码崩溃。

在上线之前,我通常会运行一次查找并注释掉console.log()。

D


2
一些压缩器会剥离掉任何以;;;为前缀的行(这是一个合法的序列,由三个空语句组成)。这样,您不仅仅局限于控制台引用(例如,您可以进行一些计算,然后在最后使用console.log()输出结果,而压缩器可以剥离所有这些内容)。我使用JavaScript::Minifier来实现这一点。

1

我在面向对象的Javascript中使用它,创建了自己的日志包装器来检查Firebug是否存在:

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

只需调用:

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

0

提醒一下,IE开发工具不支持在console.log上使用apply()方法。

当开发工具激活时,在IE8中调用console.log.apply()会引发异常。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接