В JavaScript в чем разница между переменной, которая является: null, undefined и undeclared?

В JavaScript принято объявлять и инициализировать переменную одновременно. Также принято объявлять переменную, оставлять ее неинициализированной, а затем присваивать ее в более поздний момент. Любая необъявленная переменная, оцененная в коде, вызывает ReferenceError.

null и undefined — это примитивы JS, и они отличаются друг от друга своими типами и тем, какие значения они представляют. Undeclared, однако, является обычным английским языком, а не ключевым словом JavaScript.

Различия

Существует ряд различий между переменными null и undefined:

  1. Тип значения nullobject, в то время как переменная undefined имеет тип undefined.

Необъявленные переменные отличаются от null и undefined тем, как JavaScript обращается с необъявленной переменной. Необъявленная переменная бросает ReferenceError, но ее тип на самом деле undefined.

console.log(x); // Uncaught ReferenceError: x is not defined
console.log(typeof x); // undefined
Вход в полноэкранный режим Выход из полноэкранного режима

Обратите внимание, что typeof x не выдает ошибку, потому что x здесь не оценивается.

Проверка на их наличие

Ложность
отрицательный отсутствие некоторых типов значений. Поэтому их называют фальшивыми, в отличие от истинного значения.

Чтобы решить, является ли переменная null или undefined, мы должны получить фальшивое значение. Другими словами, не истинное. Обычно переменная проверяется на истинность, и если она не прошла проверку, то она falsy, то есть либо null, либо undefined.

let x;
if (x) {
  console.log(`Hi, this is ${x}.`);
} else {
  console.log(x); // undefined
};

x = null;
if (x) {
  console.log(`Hi, this is ${x}.`);
} else {
  console.log(`Now I'm ${x}`); // Now I'm null.
};

Войти в полноэкранный режим Выйти из полноэкранного режима

Для того чтобы определить состояние переменной между null и undefined, необходимо проверить ее с помощью оператора строгого равенства ===:

let x;
if (x === undefined) {
  console.log(`Hi, this is ${x}.`); // Hi, this is undefined.
} else {
  console.log(x); 
};

x = null;
if (x === null) {
  console.log(`Hi, this is ${x}.`); // Hi, this is null.
} else {
  console.log(x); 
};
Вход в полноэкранный режим Выйти из полноэкранного режима

Это происходит потому, что стандартный оператор равенства, ==, неоднозначно решает эти два вопроса. Он возвращает true для любого из этих двух значений.

let x;
if (x == null) {
  console.log(`Hi, this is ${x}.`); // Hi, this is undefined.
} else {
  console.log(x); 
};

x = null;
if (x == undefined) {
  console.log(`Hi, this is ${x}.`); // Hi, this is null.
} else {
  console.log(x); 
};
Вход в полноэкранный режим Выход из полноэкранного режима

Обратите внимание, как x == null возвращает true для x = undefined и x == undefined возвращает true для x = null. Это не имеет значения.

Необъявленные
Необъявленные переменные в глобальной области видимости можно проверять без выброса ReferenceError с помощью :

if ( 'x' in window) {
  console.log('Hi'); 
} else {
 console.log(`Hi, x doesn't live here.`); // Hi, x doesn't live here.
};
Войти в полноэкранный режим Выйти из полноэкранного режима

Ссылки

  1. неопределенный
  2. null

Оцените статью
devanswers.ru
Добавить комментарий