Выдает ли неопределенная проверка ошибку в JavaScript без typeof в IE6? - PullRequest
1 голос
/ 26 января 2011

У меня нет доступа к IE6 сейчас, поэтому я спрашиваю здесь.

Если у меня есть сравнение, например:

// imagine App being declared as an obj somewhere...
if (App.errorLog === undefined) {
    App.errorLog = [];
}

Будет ли этот код выдавать ошибку в IE6, если свойство нигде не было объявлено или определено? Кажется, он отлично работает в других браузерах, даже в IE7. Я просто думаю, что у меня были некоторые проблемы с IE6 в то время, когда я вернулся и использовал typeof для решения этих проблем, но я не уверен.

Ответы [ 4 ]

4 голосов
/ 26 января 2011

Свойства, которые не были установлены, просто вернут значение undefined.* * * * * * * * * * * * * * * * * * * * * * ReferenceError * * * * * * * * * * * * * * * * * 100 * *

*1007* * * * * * * * * * * * * * *1007* * *1007* * * * * * * Так что ваш код будет работать.

1 голос
/ 26 января 2011

Уловка typeof решает проблемы, когда глобальная undefined была перезаписана или когда переменная не была объявлена.

В вашем случае вы просто проверяете наличие свойства в App объекте. Пока существует App, не должно быть проблем с объявлением.

Если есть вероятность, что какой-то код перезапишет undefined, тогда вам нужно typeof.

Еще один способ проверки свойства:

if ( !('errorLog' in App) ) {
    App.errorLog = [];
}

Здесь также будут рассмотрены члены prototype, что эквивалентно проверке undefined, и обойдется проблема перезаписи undefined.

1 голос
/ 26 января 2011

отлично работает в IE6, как он есть

0 голосов
/ 26 января 2011

Я полагаю, что это не вызовет исключения, а просто выйдет из условия if.Также я не слышал о неопределенных в качестве значения.если вы пытаетесь сказать, что если App.errorlog не установлен, то код должен быть App.errorlog == null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...