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

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

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

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

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

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

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

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

需要注意的一点是:在10.4版本的Safari中,任何对console.log的调用都会引发安全exception,因为控制台对象是Mac OS Dashboard小部件中使用的保留对象。 不确定是不是这样,今晚会检查。

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

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

似乎没有多少人知道这一点,但我发现它非常有价值…如果在运行代码的机器上没有安装调试器,没有任何反应,代码也很好。 虽然我不建议他们留在那里。

我有很多头疼的原因。

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

我经常在上线之前运行一个发现,并将其评论出来。

d

一些压缩机将剥离任何前缀为;;; (这是一个合法的序列,有三个空语句。)这种方式你不是严格限制在控制台引用(即你可以做一些计算,然后console.log()最后的结果,压缩器可以剥掉所有这些。)我使用JavaScript :: Minifier 。

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

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

只需致电:

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

只是提醒一下IE Dev Tool不支持console.log上的apply()。

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

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