Неопределенная проверка переменной практики
Является
if( typeof myVar === "undefined" )
такой же как
if( myVar===void(0) )
?
И какая самая лучшая практика, если есть такая? Зачем?
1 ответ
Цитирование из MDN Docs дляundefined
,
Одна из причин использовать
typeof
является то, что он не выдает ошибку, если переменная не была определена.// x has not been defined before if (typeof x === 'undefined') { // evaluates to true without errors // these statements execute } if(x === undefined){ // throws a ReferenceError }
Тем не менее, этот вид техники следует избегать. JavaScript является статически ограниченным языком, поэтому, зная, определена ли переменная, можно прочитать, посмотрев, определена ли она в окружающем контексте. Единственным исключением является глобальная область, но глобальная область привязана к глобальному объекту, поэтому проверка наличия переменной в глобальном контексте может быть выполнена путем проверки наличия свойства в глобальном объекте (с использованием оператора in, например).
Из того же документа void
раздел
var x;
if (x === void 0) {
// these statements execute
}
// y has not been defined before
if (y === void 0) {
// throws a ReferenceError (in contrast to `typeof`)
}
Заключение
Итак, когда вы используете typeof
проверить, является ли значение переменной undefined
, это не будет бросать исключение. Но прямое сравнение с undefined
или сравнение с void 0
выбросит исключение.