有时开发人员忘记在javascript代码中删除debugger;
,并且在IE上产生javascript错误。
如果调试器存在,您如何检查(如控制台:if(window.console){console.log('foo');}
)?
答案 0 :(得分:13)
你不能。
最好的解决方案是在版本控制系统中添加一个钩子,以防止提交/推送包含debugger;
语句的代码。
要求你的开发人员搜索debugger;
或至少在提交之前仔细查看差异也是一种解决方案 - 但不如VCS中的硬拒绝那样有效。
答案 1 :(得分:5)
您可以尝试编译一个将debugger
声明为局部变量的函数。如果将debugger
保留为关键字,则JS引擎将抛出您可以捕获的错误。
var debuggerIsKeyword = false;
try {
new Function("var debugger;");
} catch(e) {
debuggerIsKeyword = true;
}
但是我不确定知道关键字是否存在实际上是有帮助的。
答案 2 :(得分:2)
也许最安全的方法是为所有项目创建一个全局包含文件,如果调试器不存在则将其存根:
if (typeof debugger == 'undefined') {
window.debugger = null;
}
这样调用调试器就成了null的引用。这是无害的。看起来比预期健忘的开发人员将每个调试器调用包装在if语句中更好的方法。
同样的方法适用于console.log等。
编辑:正如AndrewF指出的那样,调试器实际上是一个关键字,而不是全局,所以这不起作用。使用以下内容可以实现相同的效果而不会抛出错误:window['debugger'] = null;
答案 3 :(得分:-3)
由于缺少IE,没有尝试过,但这应该有效:
if (typeof console !== 'undefined') {
console.log("logging enabled");
}