怎么可能`if(console == undefined)`break js执行?

时间:2011-07-20 15:02:24

标签: javascript console

当我编辑生产代码(小修补程序)时,我想添加console.log,但不要为没有firebug或不使用chrome的用户打破页面我决定重新定义控制台对象:

if (console == undefined) {
    console = {
        log     : function(){},
        info    : function(){},
        warn    : function(){},
        error   : function(){}
    };
};

插入此代码后,在没有控制台对象的浏览器(IE,没有firebug等的Firefox)中,JS执行被破坏了。 (“破碎”是指这些行之后的代码根本不执行) 为什么会这样?

6 个答案:

答案 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()来打印对象。