Firebug 无疑是一个很棒的 javascript 调试工具;我广泛使用 console.log()。
我想知道我是否可以将特定于 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(){}
};
}
提醒一句:Safari 10.4 曾经是这样,任何对 console.log 的调用都会引发安全异常,因为控制台对象是 Mac OS Dashboard 小部件中使用的保留对象。不确定是否是这种情况,今晚将检查。
不久前,我个人修改了我的压缩器,以去除预压缩的控制台引用。在那里添加一个正则表达式几分钟可以节省一生的麻烦。
只是想我会为任何 js 调试添加一个非常好的技巧......使用关键字“调试器”,它就像代码中的断点,萤火虫也检测到它,MSIE(如果你有 Visual Studio)也检测到它,就像我一样说它是一个断点。
似乎没有多少人知道这一点,但我发现它非常宝贵......而且如果运行代码的机器上没有安装调试器,则不会发生任何事情并且代码可以正常运行。虽然我不建议把它们留在那儿。
我为此而头疼过很多次。
我经常使用console.log(),直到最近,发现它会导致整个JS代码在不使用firebug的FF版本中失败。
我通常在上线之前运行一个查找,然后将其注释掉。
D
一些压缩器会去掉任何前缀为 ;;; 的行。(这是一个合法的序列,是三个空语句。)这样你就不会严格限于控制台引用(即你可以做一些计算,然后 console.log() 最后的结果,压缩器可以把它们都去掉。)我为此使用JavaScript::Minifier。
我在 OOP Javascript 中使用它,为检查萤火虫是否存在的日志制作自己的包装器:
myclass.prototype.log = function()
{
if( typeof window.console != 'undefined' )
{
console.log.apply( null, arguments );
}
}
只需致电:
this.log( arg1, arg2, ...)
您可以尝试JavaScript Debug,它是 console.log http://benalman.com/projects/javascript-debug-console-log/的简单包装器
只是提醒一下,IE 开发工具不支持 console.log 上的 apply()。
当开发工具处于活动状态时,调用 console.log.apply() 将在 IE8 中引发异常。