【问题标题】:js override console.log if not defined如果未定义,js 会覆盖 console.log
【发布时间】:2011-04-15 15:20:20
【问题描述】:

你推荐哪种解决方案,第二种更简单(代码更少),但使用它有缺点?

首先:(设置全局调试标志)

// the first line of code
var debug = true;
try {
    console.log
} catch(e) {
    if(e) {
        debug=false;
    }
};
// Then later in the code
if(debug) {
    console.log(something);
}

第二:覆盖console.log

try {
    console.log
} catch(e) {
    if (e) {
        console.log = function() {}
    }
};
// And all you need to do in the code is
console.log(something);

【问题讨论】:

    标签: javascript console firebug


    【解决方案1】:

    两者都不是,而是第二种的变体。丢失try...catch 并正确检查控制台对象是否存在:

    if (typeof console == "undefined") {
        window.console = {
            log: function () {}
        };
    }
    
    console.log("whatever");
    

    【讨论】:

    • 想必你要么想做this.console = ...var console = ...?正如您目前所拥有的那样,在 ECMAScript 5 严格模式下会出现错误。
    • @Tim:谢谢,这是一个疏忽。我认为window.console 最适合便携性。
    • 在能够将此代码移动到函数中的意义上的可移植性,而不是环境之间的可移植性?
    • 您是否应该测试 typeof window.console ,因为您稍后要设置 window.console ?或者应该窗口。被删除?
    • 请务必查看下面 Suresh 的解决方案 - 他还定义了其他可能未定义的控制台方法。请参阅 developer.mozilla.org/en-US/docs/Web/API/Console 以获取所有可用控制台方法的完整列表以及浏览器支持情况。
    【解决方案2】:

    或者,在咖啡脚本中:

    window.console ?=
        log:-> #patch so console.log() never causes error even in IE.
    

    【讨论】:

      【解决方案3】:

      编辑: Andy's answer 比我在下面发布的快速破解要优雅得多。

      我一般都用这种方式……

      // prevent console errors on browsers without firebug
      if (!window.console) {
          window.console = {};
          window.console.log = function(){};
      }
      

      【讨论】:

      • 我喜欢您的 Frankie 版本,但我不确定它是否可以在所有浏览器中安全运行。我记得使用它,但在其中一个 IE 版本中仍然偶尔会出现问题,这可能是因为 console 对象仅在 IE9 中打开控制台窗口时才定义。我想我必须像 Andy E 建议的那样做一个“未定义”检查。
      • @Simon 这作为评论来晚了,但今天才看到。 Andy 的解决方案比我发布的这个快速破解要优雅得多。你应该改用它。
      【解决方案4】:

      我过去遇到过类似的错误,我用下面的代码克服了它:

      if(!window.console) {
          var console = {
              log : function(){},
              warn : function(){},
              error : function(){},
              time : function(){},
              timeEnd : function(){}
          }
      }
      

      【讨论】:

      • 这与 Frankie 或 Andy_E 的答案有何不同?
      • Suresh 的回答更好,因为他还定义了其他不会与 log 一起定义的方法。查看developer.mozilla.org/en-US/docs/Web/API/Console 了解可能(或未定义)定义的所有函数的完整列表。
      • 如果从函数中调用,这将不起作用。而不是var console 应该是window.console 或者只是console
      【解决方案5】:

      我遇到了这篇文章,与其他答案相似:

      http://jennyandlih.com/resolved-logging-firebug-console-breaks-ie

      【讨论】:

        【解决方案6】:

        以下将实现您正在寻找的:

        window.console && console.log('foo');
        

        【讨论】:

          【解决方案7】:
          window.console = window.console || {};
          window.console.log = window.console.log || function() {};
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-03
            • 1970-01-01
            • 2020-04-22
            • 1970-01-01
            相关资源
            最近更新 更多