Неопределенная проверка переменной практики

Является

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 выбросит исключение.

Другие вопросы по тегам