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/