开发者

How to check if 'debugger;' keyword exists?

Sometimes some developers forgot to remove debugger; in javascript code, and it produce javascript error on IE.开发者_JAVA技巧 How can you check (like for the console: if(window.console){console.log('foo');}) if a debugger exists?

BTW: I don't want to detect if the browser is IE, I want a generic method if possible Thanks,


You cannot.

The best solution would be adding a hook to your version control system to prevent code containing debugger; statements from being committed/pushed.

Asking your devs to search for debugger; or at least have a careful look at the diff before committing is also a solution - but not as effective as hard-rejecting in the VCS.


You could attempt to compile a function that declares debugger as a local variable. If debugger is reserved as a keyword, the JS engine will throw an error which you can catch.

var debuggerIsKeyword = false;
try {
    new Function("var debugger;");
} catch(e) {
    debuggerIsKeyword = true;
}

However I'm not sure that knowing whether a keyword exists or not is actually helpful.


Maybe the safest approach is to have a global include file for all your projects that stubs out the debugger if it doesn't exist:

if (typeof debugger == 'undefined') {
    window.debugger = null;
}

That way calls to debugger just become a reference to null. which is harmless. Seems like a better approach than expecting forgetful developers to wrap each debugger call in an if statement.

The same approach works for console.log, etc.

EDIT: As AndrewF points out, debugger is actually a keyword, not a global, so this won't work. The same effect can be achieved using the following without throwing an error:

window['debugger'] = null;


Haven't tried it for lack of an IE, but this should work:

if (typeof console !== 'undefined') {
  console.log("logging enabled");    
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜