Подтвердить что ты не робот

Typeof возвращает "unknown" в IE

У меня есть окно, где перед закрытием я обновляю базовую страницу.

if(opener && typeof(opener.Refresh) != 'undefined')
{
    opener.Refresh();
}

Если я отошел от исходной начальной страницы, этот код выведет ошибку "Разрешить отказ".

Отладка кода показала, что typeof(opener.Refresh) был равен "неизвестно" вместо ожидаемого "undefined".

Насколько мне известно, "неизвестно" не является одним из возвращаемых значений для typeof, , так как и почему это значение будет возвращено?

Дополнительная информация

Я избежал ошибки, изменив проверку на:

if(opener && typeof(opener.Refresh) == 'function')

Однако примеры вроде этого (detecting-an-undefined-object-property-in-javascript), похоже, не влияют на "неизвестные" в уравнение.

4b9b3361

Ответ 1

В соответствии с дублирующим вопросом в байтах значение typeof unknown добавляется в JScript версии 8 вместе с date.

A comment в блог Роберта Наймана также можно пояснить:

Internet Explorer отображает "неизвестно", когда объект, о котором идет речь, включен с другой стороны моста COM+. Вы можете не знать этого или понимать это, но объект XMLHTTP MSs является частью другого COM + -объекта, который реализует IUnknown; когда вы вызываете методы на нем, вы делаете так COM-мост и не вызывать собственный JavaScript.

В основном, MSs ответят, если вы пытаетесь протестировать или получить доступ к чему-либо это не истинная часть движка JScript.

Ответ 2

Попробуйте оператор in. У меня была та же проблема (с апплетом), и я решил ее с помощью in:

if("Refresh" in opener) {
    opener.Refresh();
}

Ответ 3

спецификация ECMAScript утверждает, что для объектов хоста возвращаемое значение оператора typeof:

Реализация, за исключением, может быть не "undefined", "boolean", "number" или "string".

Я считаю, что значение unknown возвращается только в Internet Explorer. Интересно, что MSDN не упоминает об этом:

Существует шесть возможных значений, возвращаемых typeof: "number", "string", "boolean", "object", "function" и "undefined."