How to check if 'debugger;' keyword exists?

后端 未结 4 1951
野趣味
野趣味 2021-02-08 11:06

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(wi

相关标签:
4条回答
  • 2021-02-08 11:43

    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.

    0 讨论(0)
  • 2021-02-08 11:46

    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;
    
    0 讨论(0)
  • 2021-02-08 11:47

    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.

    0 讨论(0)
  • 2021-02-08 11:54

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

    if (typeof console !== 'undefined') {
      console.log("logging enabled");    
    }
    
    0 讨论(0)
提交回复
热议问题