检查控制台是否存在

我正在写一个插件。 为此我会记录一些事情,说警告,necc事情等。要记录它们我将使用控制台,但如果某些浏览器不支持控制台可能会出错。 要处理此错误,我正在考虑使用此代码:

if (typeof console == 'undefined') console = {}; if (typeof console.log == 'undefined') console.log = function() {}; if (typeof console.debug == 'undefined') console.debug = function() {}; if (typeof console.info == 'undefined') console.info = function() {}; if (typeof console.warn == 'undefined') console.warn = function() {}; if (typeof console.error == 'undefined') console.error = function() {}; 

这项工作是正确还是有更好的选择?

你接近它了。 但是你可以缩短一点:

 if(typeof console === "undefined") { console = { log: function() { }, debug: function() { }, ... }; } 

这允许您在不首先检查是否定义了控制台对象的情况下使用console.log/console.debug etc 。 我建议您在记录时始终包含此片段,因为很容易忘记删除,如果没有控制台,它将破坏您的网站。

这种方法使得将来更容易添加/更改/删除方法,并且比大多数方法更优雅,更少冗余:

 if (!"console" in window || typeof console == "undefined") { var methods = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; var emptyFn = function () {}; window.console = {}; for (var i = 0; i < methods.length; ++i) { window.console[methods[i]] = emptyFn; } } 
 console && console.log("whatever"); 

这不起作用吗?

如何使用库进行日志记录?

  • YUI控制台
  • log4j的
  • jsnlog
  • 日志等级

更新:您可以使用以下脚本来避免缺少控制台的浏览器中的console错误。

https://github.com/h5bp/html5-boilerplate/blob/master/src/js/plugins.js

如何缩短@alexn的答案

 window.console = window.console || { debug: function(){}, log: function() { } };