Кто-нибудь знает, почему IE9 typeof console.log сообщает "объект", другие сообщают "функция"?

В Firefox/Chrome/others, typeof console.log сообщает "function". В IE9 (при условии, что консоль разработчика открыта, таким образом определяя свойство window.console), если вы покажете переменную console.log в консоли разработчика, отобразите

function(...) {
[native code]
}

но он сообщает typeof console.log как "объект". В стандарте говорится, что функции должны сообщаться как "функция". Кто-нибудь знает, почему это происходит?

Ответ 1

Кажется, это ошибка в IE, так как многие (или все) элементы консоли, которые должны быть функциями, выглядят как объекты.

Если вы пытаетесь вызвать методы функции, которых там нет, вы можете обратиться к этой статье: http://whattheheadsaid.com/2011/04/internet-explorer-9s-problematic-console-object

В противном случае самое простое решение:

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

Это не самое прекрасное решение, поскольку это действительно ошибка с соблюдением стандартов безопасности IE, несмотря на то, что их диск делает противоположное, но console.log не должен быть чем-то другим, кроме объекта или функции, поэтому должно быть безопасно использовать. В противном случае вы можете сделать что-то более сложное, например:

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