В чем разница между переменной JavaScript, которая является: null, undefined или undeclared?
В JavaScript часто встречаются три состояния переменных: null
, undefined
и undeclared
. Каждое из этих состояний имеет свое значение и поведение, и важно понимать, чем они отличаются.
1. null
null
— это явное присваивание "пустого" значения переменной. Это значение указывает, что переменная была инициализирована, но в данный момент не содержит никаких данных. То есть переменная существует, но в нее не записано никакое полезное значение.
Пример:
let a = null;
console.log(a); // null
console.log(typeof a); // "object" (не ошибка, это исторический баг в JS)
Основные моменты:
null
— это примитивное значение, которое представляет собой "пустую" или "незаполненную" переменную.- Чаще всего используется, когда необходимо явно обозначить отсутствие значения.
2. undefined
undefined
— это значение, которое присваивается переменной, если она была объявлена, но еще не инициализирована, или если функция не возвращает значение. Это также значение по умолчанию для неинициализированных параметров функции.
Пример:
let b;
console.log(b); // undefined
console.log(typeof b); // "undefined"
function example() {}
console.log(example()); // undefined, потому что функция не возвращает значения
Основные моменты:
undefined
— это значение по умолчанию для переменных, которые объявлены, но еще не присвоены значением.- Также используется для возвращаемых значений функций, если они ничего не возвращают.
3. undeclared
(необъявленная переменная)
Переменная считается "необъявленной", если она используется без предварительного объявления через let
, const
или var
. В отличие от null
или undefined
, попытка обратиться к необъявленной переменной приведет к ошибке.
Пример:
console.log(c); // ReferenceError: c is not defined
Основные моменты:
- "Необъявленная переменная" означает, что переменная никогда не была объявлена.
- При попытке доступа к необъявленной переменной возникает ошибка типа
ReferenceError
.
4. Сравнение null
, undefined
и необъявленных переменных
Состояние | Что это значит | Значение | Поведение при использовании |
---|---|---|---|
null | Явно присвоенное пустое значение | null | Переменная существует, но не имеет значения. |
undefined | Неинициализированная переменная | undefined | Переменная существует, но еще не имеет значения. |
undeclared | Необъявленная переменная | Не существует | Ошибка при попытке доступа (ReferenceError). |
Пример с null
и undefined
:
let x = null; // переменная существует и явно пуста
let y; // переменная существует, но не имеет значения (undefined)
console.log(x === y); // false, потому что null и undefined — разные значения
5. Заключение
null
— это явно присвоенное "пустое" значение переменной.undefined
— это неявное значение, которое присваивается переменной, если она была объявлена, но не инициализирована.undeclared
— это необъявленная переменная, доступ к которой вызывает ошибку.
Важно понимать, что null
и undefined
не равны друг другу, и различие между ними может повлиять на логику вашего кода.