Что лучше?Должен ли я использовать typeof в равенстве Javascript?
if (obj === undefined) { }
против
if (typeof(obj) === 'undefined') { }
Что лучше?Должен ли я использовать typeof в равенстве Javascript?
if (obj === undefined) { }
против
if (typeof(obj) === 'undefined') { }
Это было предложено раньше, но более общий подход, чтобы сделать это:
typeof(x) == 'undefined'
Я бы с второй, так как «undefined» не является зарезервированным словом. Пример:
var obj = undefined;
undefined = {};
if(obj === undefined) {
console.log("undefined 1");
}
if(typeof obj === 'undefined') {
console.log("undefined 2");
}
будет показывать только «неопределенная 2», так как переменная undefined
может быть изменена.
Если вы каким-то образом не может воздержаться от слежки глобального 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) {
}
})();
Тщательно и точно, но я не уверен, почему вы подумайте о том, чтобы «позволить сломанному кодовому разрыву» улучшить практику кодирования, чем использовать что-то еще, что гарантировано всегда работать и только немного сложнее. –
@Tim Down: Ну, они личные предпочтения, но я не верю в кодирование, чтобы приспособиться к плохой практике кодирования. Сломанный код - отличный инструктор. Кроме того, я нахожу * fix * визуально отвратительным и совершенно неинтуитивным. Я понимаю его цель, но тогда я думаю, что, когда человек понимает причины, в которых они нуждаются, они больше не нуждаются в этом. Просто мои мнения. ; О) – user113716
Я использую
if(typeof x==="undefined"){
}
Почему? Потому что код ниже не работает на iPad.
if(x===undefined){
}
В iOS сообщается об ошибке, когда x не определено. :-) Вы не можете использовать неопределенные vars для сравнения в iOS
Вопрос был связан с производительностью, и все ответы о лучшем, независимо от производительности. – Kousha