#простымисловами: Разница между null, undefined и NaN в JavaScriptВ JavaScript часто путаются три специальных значения:
null
,
undefined
и
NaN
. Они встречаются в самых разных ситуациях, и их понимание поможет избежать множества досадных ошибок в коде. Давайте разберёмся, что означает каждое из них, на примерах.
1. undefinedundefined
используется, чтобы обозначить переменную или свойство, значение которых ещё не было установлено.
Самый яркий пример: если вы создаёте переменную, но ничего не присваиваете ей, то её значение будет
undefined
.
let a; // Переменная создана, но ей ничего не присвоено
console.log(a); // Выведет: undefined
То же самое происходит, если вы пытаетесь обратиться к свойству объекта, которого не существует:
const obj = {};
console.log(obj.key); // undefined, потому что свойства key просто нет
Ещё
undefined
возвращается, когда функция ничего не возвращает явно:
function sayHello() {
console.log("Hello!");
}
console.log(sayHello()); // undefined, так как ничего не возвращается
2. nullnull
используют, когда нужно явно указать, что значения у чего-то быть
не должно. Это не ошибка, а осознанное решение разработчика.
Например, у вас есть переменная, и вы хотите сказать: "Тут ничего нет". Для этого вы присваиваете ей
null
:
let result = null; // Явно указали, что значения здесь пока нет
В отличие от
undefined
,
null
устанавливается вручную. Это, по сути, способ сказать «очищено» или «пусто».
let user = { name: "Anna" };
user = null; // Теперь внутри переменной user ничего нет
3. NaNNaN
появляется, когда вы пытаетесь выполнить математическую операцию, которая не имеет числового результата.
Пример: деление строки на число. Это просто не имеет смысла, поэтому результатом будет
NaN
.
let value = "hello" / 2; // Попытка деления строки "hello" на число
console.log(value); // NaN
Стоит помнить, что
NaN
— это числовой тип (да, иронично), но означает что-то, что не число.
Вот ещё ситуации, где встречается
NaN
:
console.log(parseInt("abc")); // NaN, не удалось преобразовать строку в число
console.log(Math.sqrt(-1)); // NaN, корень отрицательного числа не определён
Забавные особенности—
typeof null
возвращает
"object"
, что является исторической ошибкой JavaScript. Не путайте это с объектами:
null
— это отдельное значение, которое просто так "зависло" в объектной категории.
—
isNaN
— интересный метод для проверки, является ли значение "не числом", но сам метод не идеален:
isNaN("hello"); // true, это NaN
isNaN("123"); // false, это число