null и undefined
Вы уже знаете логические значения — ясное да или нет. Программе иногда нужно сказать «здесь нет значения.» В JavaScript два обычных «пустых»: undefined и null. Они похожи, но история у каждого своя. Здесь разделим их, чтобы позже преобразования и проверки не путали.
В чём разница между null и undefined?
undefined обычно значит «сюда ещё ничего не положили» — переменная с let без присваивания или отсутствующая часть. null значит «пусто намеренно»: вы (или API) ставите null, чтобы очистить слот. Проверьте через typeof: typeof undefined даёт "undefined", а typeof null — старый quirk "object". Для сравнения предпочитайте ===. Оба falsy, но это не булевы (true / false).
Набор инструментов для пустых значений
📊 null против undefined для начинающих
| Идея | Пример | Результат / заметка |
|---|---|---|
| Отсутствует / не присвоено | let x; затем x |
undefined |
| Намеренная пустота | let box = null |
пустоту выбрали вы |
typeof для отсутствующего |
typeof undefined |
"undefined" |
typeof для пустого |
typeof null |
"object" (quirk — всё равно пусто) |
| Строгое сравнение | box === null |
true, если в box лежит null |
| Мягкое сравнение | null == undefined |
true с == — для ясности лучше === |
undefined — ещё не присвоено
Объявите имя через let и ничего не присваивайте. Значение — undefined. Выведите значение и typeof, чтобы закрепить метку "undefined".
let nickname;
console.log(nickname);
console.log(typeof nickname);
null — пусто намеренно
Ставьте null, когда нужно ясно сказать «нет значения». Это не то же самое, что забыть присваивание.
let selected = null;
console.log(selected);
console.log(typeof selected);
typeof рядом
Посмотрите оба результата вместе. Помните: typeof null с "object" — quirk, а не полноценный урок про объекты.
console.log(typeof undefined);
console.log(typeof null);
let a;
let b = null;
console.log(typeof a);
console.log(typeof b);
Для null и undefined предпочитайте ===
=== проверяет и значение, и тип. Используйте, когда нужно «точно null» или «точно undefined». С == null и undefined могут совпасть — при обучении это легко перепутать.
let user = null;
let title;
console.log(user === null);
console.log(title === undefined);
console.log(user === undefined);
Мягкий == может их смешать
С == null и undefined совпадают. Выведите один раз — дальше держите реальные проверки на ===.
console.log(null == undefined);
console.log(null === undefined);
Первая строка даёт true, потому что == мягкий. Вторая — false. Пишите настоящие проверки через ===, чтобы намерение было ясно.
Покажите оба пустых на странице
Храните имя в стиле undefined и одно с null, затем короткие подписи через textContent.
<!DOCTYPE html>
<html>
<head>
<title>null and undefined — labels</title>
</head>
<body>
<p id="out">…</p>
<script>
let title;
let avatar = null;
document.getElementById("out").textContent =
"title=" + title + " | avatar=" + avatar;
</script>
</body>
</html>
Абзац показывает оба пустых в одной строке. Смените только avatar на короткую строку, обновите страницу и убедитесь: правая половина меняется, а title остаётся undefined.
Попробуйте сами
- Объявите
let city;— выведитеcityиtypeof cityбез присваивания. - Поставьте
let bag = null;— выведите значение иtypeof bag(ждите quirk"object"). - Выведите
typeof undefinedиtypeof nullрядом. - Сравните через
===: переменную сnullсnullи сundefined. - Один раз выведите
null == undefined, затем пишите реальные проверки через===. - В HTML-демо задайте
avatar = "pic.png", обновите и прочитайте новую строку.
Частые ошибки
- Считать
nullиundefinedвсегда взаимозаменяемыми — смысл разный (намеренно vs не присвоено) - Паниковать из-за
typeof null→"object"— quirk;nullвсё равно намеренная пустота - Полагаться на
==между ними, не замечая мягкого совпадения - Называть их булевыми — это пустые значения; булевы только
true/false - Путать пустую строку
""сnull—""всё ещё строка
Кратко
undefined: отсутствует / ещё не присвоено;typeof→"undefined"null: намеренная пустота, которую задаёте вы;typeof→"object"(quirk)- Для ясных проверок предпочитайте
===; оба falsy, но не булевы - Пустая строка
""— текст, не то же самое чтоnullилиundefined - Дальше: преобразование типов — намеренно менять значение одного вида на другой
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху