В JavaScript принято объявлять и инициализировать переменную одновременно. Также принято объявлять переменную, оставлять ее неинициализированной, а затем присваивать ее в более поздний момент. Любая необъявленная переменная, оцененная в коде, вызывает ReferenceError
.
null
и undefined
— это примитивы JS, и они отличаются друг от друга своими типами и тем, какие значения они представляют. Undeclared, однако, является обычным английским языком, а не ключевым словом JavaScript.
Различия
Существует ряд различий между переменными null
и undefined
:
- Тип значения
null
—object
, в то время как переменная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.
};
Ссылки
- неопределенный
- null