Firebug是一款非常出色的JavaScript调试工具;我广泛使用console.log()。
我想知道是否可以在生产环境中保留Firebug特定的代码。什么是最佳实践?注释调试代码?
Firebug是一款非常出色的JavaScript调试工具;我广泛使用console.log()。
我想知道是否可以在生产环境中保留Firebug特定的代码。什么是最佳实践?注释调试代码?
我之前也遇到过这个问题。理想情况下,在生产环境中应该删除所有的console.log语句,但是这种方法容易出错,开发人员往往会忘记或仅在FF + Firebug中进行测试。
一个可能的解决方案是,如果尚未定义控制台对象,则创建一个虚拟的控制台对象。
if( typeof window.console == 'undefined'){
window.console = {
log:function(){}
};
}
需要注意的一点是:在Safari 10.4中,对console.log的任何调用都会抛出安全异常,因为console对象是Mac OS Dashboard小部件中使用的保留对象。不确定现在是否仍然是这种情况,今晚会检查一下。
个人而言,我一段时间前修改了我的压缩程序,以便在预压缩时剥离掉控制台引用。只需花费几分钟添加一个正则表达式就可以节省大量的麻烦。
var a = console;a.log("test");
仍然会抛出错误。当然,不太可能会出现任何这样的引用,但由于存在更好的解决方案(请参见上文),因此这似乎是不明智的做法。 - David Mulder我想添加一个对任何JS调试非常有用的技巧……使用关键字“debugger”,它就像是代码中的断点。Firebug可以检测到它,MSIE(如果您有Visual Studio)也可以检测到它,并且如我所说,它是一个断点。
不多人知道这个技巧,但我发现它非常宝贵……而且,如果在运行代码的机器上没有安装调试器,什么都不会发生,代码将正常执行。虽然我不建议把这些保留在代码里。
这个问题曾经让我头痛不已。
我经常使用console.log(),但最近发现在没有安装firebug的FF版本中,它会导致整个JS代码崩溃。
在上线之前,我通常会运行一次查找并注释掉console.log()。
D
我在面向对象的Javascript中使用它,创建了自己的日志包装器来检查Firebug是否存在:
myclass.prototype.log = function()
{
if( typeof window.console != 'undefined' )
{
console.log.apply( null, arguments );
}
}
只需调用:
this.log( arg1, arg2, ...)
提醒一下,IE开发工具不支持在console.log上使用apply()方法。
当开发工具激活时,在IE8中调用console.log.apply()会引发异常。