2011-06-26 2 views

ответ

1

Я бы с второй, так как «undefined» не является зарезервированным словом. Пример:

var obj = undefined; 
undefined = {}; 

if(obj === undefined) { 
    console.log("undefined 1"); 
} 

if(typeof obj === 'undefined') { 
    console.log("undefined 2"); 
} 

будет показывать только «неопределенная 2», так как переменная undefined может быть изменена.

4

Если вы каким-то образом не может воздержаться от слежки глобального undefined, или не может держать от попыток ссылаться необъявленных переменных, а затем использовать:

typeof x === 'undefined' 

Если вы будете придерживаться хорошей практики кодирования, и верить в позволяя сломанный код перерыв, используйте:

x === undefined 

Если вы хотите другой альтернативы, вы можете использовать:

x === void 0; 

... где void всегда возвращает undefined и не полагается на глобальную собственность.

Другой гарантией вы можете использовать это, чтобы использовать затенение в хорошем смысле, определяя правильный undefined в функции:

(function(undefined) { 

    // notice that no arguments were passed, 
    // so the `undefined` parameter will be `undefined` 

    var x; 

    if(x === undefined) { 

    } 

})(); 

... некоторые люди предпочитают, чтобы дать ему другое имя:

(function(undef) { 

    // notice that no arguments were passed, 
    // so the `undefined` parameter will be `undefined` 

    var x; 

    if(x === undef) { 

    } 

})(); 
+0

Тщательно и точно, но я не уверен, почему вы подумайте о том, чтобы «позволить сломанному кодовому разрыву» улучшить практику кодирования, чем использовать что-то еще, что гарантировано всегда работать и только немного сложнее. –

+1

@Tim Down: Ну, они личные предпочтения, но я не верю в кодирование, чтобы приспособиться к плохой практике кодирования. Сломанный код - отличный инструктор. Кроме того, я нахожу * fix * визуально отвратительным и совершенно неинтуитивным. Я понимаю его цель, но тогда я думаю, что, когда человек понимает причины, в которых они нуждаются, они больше не нуждаются в этом. Просто мои мнения. ; О) – user113716

-1

Я использую

if(typeof x==="undefined"){ 
} 

Почему? Потому что код ниже не работает на iPad.

if(x===undefined){ 
} 

В iOS сообщается об ошибке, когда x не определено. :-) Вы не можете использовать неопределенные vars для сравнения в iOS

Смежные вопросы