有人知道为什么IE9 typeof console.log报告“object”,而其他浏览器报告“function”吗?

4
在Firefox/Chrome/其他浏览器中,typeof console.log会返回"function"。在IE9中,如果开启开发者控制台(从而定义了window.console属性),并在其中显示console.log变量,则会显示
function(...) {
[native code]
}

尽管console.log的typeof被报告为'object',但标准说明函数应该被报告为'function'。有人知道为什么会出现这种情况吗?

1个回答

3

似乎这是IE中的一个bug,因为许多(或所有)应该是函数的控制台元素实际上看起来是对象。

如果您试图调用不存在的函数方法,则可以参考此文章: http://whattheheadsaid.com/2011/04/internet-explorer-9s-problematic-console-object

否则,最简单的解决方案是执行以下操作:

typeof(console.log) !== 'undefined'

这并不是最优美的解决方案,因为实际上这是IE浏览器不遵守标准的一个bug,尽管他们努力相反。但是console.log本来就应该是一个对象或函数,所以使用它应该是安全的。否则,你可以使用更复杂的方法,比如:

switch (typeof(console.log)) {
    case 'object':
    case 'function':
        // Should be a valid console.log object, do something with it
    break;
}

谢谢您提供的参考。最终我确实采用了您建议的相同方式,只是检查log != undefined。 - Dave Combs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接