Ответ
В JavaScript null и undefined представляют разные концепции отсутствия значения.
| Критерий | undefined |
null |
|---|---|---|
| Тип | typeof undefined === 'undefined' |
typeof null === 'object' (историческая особенность языка) |
| Значение по умолчанию | Значение неинициализированных переменных, отсутствующих свойств объекта, параметров функции, которым не передали аргумент. | Явно присваиваемое значение, обозначающее "ничего", "пусто", "значение отсутствует". |
| Использование | Системное (движок JS). | Программное (разработчик). |
Примеры:
// undefined (системное)
let a;
console.log(a); // undefined
const obj = {};
console.log(obj.nonExistentProp); // undefined
function foo(x) { console.log(x); }
foo(); // undefined
// null (программное)
let b = null; // Явно указываем, что значения нет
const response = await fetch('/api/data');
const data = await response.json();
if (data.error) {
data.result = null; // Явно обнуляем результат при ошибке
}
Проверка:
// Строгая проверка (рекомендуется)
if (value === undefined) { /* только для undefined */ }
if (value === null) { /* только для null */ }
// Проверка на "nullish" (null или undefined) - ES2020
if (value == null) { /* true для null И undefined (но осторожно с ==) */ }
if (value === null || value === undefined) { /* явная и безопасная проверка */ }
const result = value ?? 'default'; // Оператор нулевого слияния (Nullish Coalescing)
Ключевое: undefined обычно означает, что значение ещё не было определено, в то время как null — это намеренное указание на отсутствие какого-либо объектного значения.
Ответ 18+ 🔞
А, ну это классика, блядь! Смотри, тут про null и undefined — вечная тема для споров, как спор про ананас в пицце.
Представь, ты заходишь в свою квартиру. Если переменная — это комната, то undefined — это когда ты ещё даже не зашёл и нихуя не знаешь, что там внутри. Может, там мебель, а может, голые стены. А null — это когда ты специально зашёл и вынес оттуда всё до чиста, оставил голый пол. Намеренно сделал пустоту, ёпта.
Вот таблица, чтобы не ебать мозг:
| Критерий | undefined |
null |
|---|---|---|
| Тип | typeof undefined === 'undefined' (логично, да?) |
typeof null === 'object' (а вот это пиздец, исторический косяк языка, смирись) |
| Значение по умолчанию | Что-то неинициализированное: переменная без значения, свойство, которого нет, аргумент, который не передали. Сам язык это подсовывает. | Ты сам, своей рукой, пишешь = null. Типа "здесь пусто, я так захотел". |
| Использование | Системное, от движка. | Твоё, осознанное, программное. |
Примеры, чтобы вообще всё встало на свои места:
// undefined (тебе его подарили)
let a; // Объявил, но не дал значения — получай undefined, логично же?
console.log(a); // undefined
const obj = {};
console(obj.nonExistentProp); // undefined — свойства-то нет, чего ты ждёшь?
function foo(x) { console.log(x); }
foo(); // undefined — аргумент не передали, чему 'x' равняться?
// null (ты это сделал сам)
let b = null; // Явно говорю: "b, ты сейчас ничего не значишь, пустота".
const response = await fetch('/api/data');
const data = await response.json();
if (data.error) {
data.result = null; // Явно обнуляю результат, потому что запрос пошёл по пизде.
}
А теперь самое важное — как это проверять, чтобы не облажаться:
// Делай строго (все адекватные люди так делают)
if (value === undefined) { /* ловим только undefined */ }
if (value === null) { /* ловим только null */ }
// Проверка на "null или undefined" (nullish)
if (value == null) { /* сработает и на null, и на undefined, но осторожно с этим '==' */ }
// Лучше уж явно, без этих танцев:
if (value === null || value === undefined) { /* вот так надёжно, ебать */ }
const result = value ?? 'default'; // Оператор нулевого слияния — красота! Вернёт 'default' только если value — null или undefined.
Короче, суть: undefined — это "ещё не определено", движок тебе его подкидывает. null — это "определённо ничего", ты сам это пишешь. Главное — не путай их, а то будет тебе хиросима в коде, ядрёна вошь!
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶