10

Sometimes some developers forgot to remove debugger; in javascript code, and it produce javascript error on IE. 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,

JohnJohnGa
  • 15,446
  • 19
  • 62
  • 87

4 Answers4

13

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.

ThiefMaster
  • 310,957
  • 84
  • 592
  • 636
5

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.

cspotcode
  • 1,832
  • 1
  • 13
  • 17
2

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;
Nick Lockwood
  • 40,865
  • 11
  • 112
  • 103
  • 3
    `debugger` is a reserved word, and thus it "may not be used as variables, functions, methods, or object identifiers". This code ought to cause a parse error. – AndrewF Dec 28 '12 at 04:34
-3

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

if (typeof console !== 'undefined') {
  console.log("logging enabled");    
}
eikes
  • 4,811
  • 2
  • 31
  • 31