当我编辑生产代码(小修补程序)时,我想添加console.log
,但不要为没有firebug或不使用chrome的用户打破页面我决定重新定义控制台对象:
if (console == undefined) {
console = {
log : function(){},
info : function(){},
warn : function(){},
error : function(){}
};
};
插入此代码后,在没有控制台对象的浏览器(IE,没有firebug等的Firefox)中,JS执行被破坏了。 (“破碎”是指这些行之后的代码根本不执行) 为什么会这样?
答案 0 :(得分:9)
(console == undefined)
将抛出ReferenceError
。
使用typeof
而不是ReferenceErrors
用于未声明的变量
(typeof console === "undefined")
答案 1 :(得分:5)
试试这个:
if ( window.console === undefined ) {
window.console = {
// Your methods
}
}
答案 2 :(得分:2)
将变量与undefined
进行比较并不是很好,因为undefined
是一个简单的未定义变量。
您可以使用以下内容:
if (!window.console)
console = {
log : function(){},
info : function(){},
warn : function(){},
error : function(){}
};
编辑:我刚发现:How do I print debug messages in the Google Chrome JavaScript Console?
答案 3 :(得分:1)
如果未在js中定义控制台,那么它将抛出错误而不是使用typeof来检查变量的存在
if (typeof console == 'undefined') { }
答案 4 :(得分:1)
如果您将if(console == undefined)
更改为if(window.console == undefined)
,一切都会正常工作
答案 5 :(得分:1)
上述任何答案都可以正常使用。
一个注意事项:您可能还会在空方法列表中添加“dir”,因为人们有时会使用console.dir()
来打印对象。