如何检查'调试器;'关键字存在?

时间:2011-03-24 10:57:06

标签: javascript

有时开发人员忘记在javascript代码中删除debugger;,并且在IE上产生javascript错误。 如果调试器存在,您如何检查(如控制台:if(window.console){console.log('foo');})?

BTW:我不想检测浏览器是否是IE,如果可能的话我想要一个通用的方法 谢谢,

4 个答案:

答案 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");    
}