В чём отличие null от undefined?

👨‍💻 Frontend Developer 🟡 Часто попадается 🎚️ Легкий
#JavaScript #База JS

Краткий ответ

undefined — значение по умолчанию для неинициализированных переменных 🆕 null — специальное значение, означающее “ничего” или “пусто” 🚫

let a;        // undefined
let b = null; // null
 
console.log(a); // undefined
console.log(b); // null

Полный ответ

null и undefined — как два вида “пустоты”: один случайный, другой intentional! 📦

undefined — непреднамеренная пустота

undefined — как комната, которую ещё не заселили:

// Переменная объявлена, но не инициализирована
let name;
console.log(name); // undefined
 
// Функция ничего не возвращает
function doNothing() {}
console.log(doNothing()); // undefined
 
// Нет такого свойства в объекте
const user = {name: 'Иван'};
console.log(user.age); // undefined

Когда получаем undefined:

  1. Объявили переменную, но не присвоили значение
  2. Функция ничего не возвращает
  3. Нет свойства в объекте
  4. Параметр не передан в функцию

null — преднамеренная пустота

null — как пустая коробка, которую нарочно оставили пустой:

// Специально указываем "ничего"
let name = null;
console.log(name); // null
 
// Очищаем значение
let user = {name: 'Иван'};
user.name = null; // Явно очищаем
 
// Не найдено
function findUser(id) {
  // Если не нашли пользователя
  return null; // Явно указываем "не найден"
}

Когда используем null:

  1. Хочем явно указать “пустое значение”
  2. Очищаем переменную
  3. Не нашли что-то
  4. Сбрасываем значение

Проверка значений

Как проверить undefined

let value;
 
// ❌ Плохо — может сломаться
if (value === undefined) { /* ... */ }
 
// ✅ Хорошо — безопасно
if (typeof value === 'undefined') { /* ... */ }
 
// ✅ Ещё лучше — коротко
if (value === void 0) { /* ... */ }

Как проверить null

let value = null;
 
// ✅ Просто сравниваем
if (value === null) { /* ... */ }
 
// ✅ Или проверяем ложность
if (value == null) { /* ... */ } // Работает и для null, и для undefined

Сравнение null и undefined

console.log(null == undefined);  // true (нестрогое сравнение)
console.log(null === undefined); // false (строгое сравнение)
 
console.log(null == 0);  // false
console.log(null == ''); // false
console.log(null == false); // false
 
console.log(undefined == 0);  // false
console.log(undefined == ''); // false
console.log(undefined == false); // false

Когда что использовать

Используй undefined когда:

// ✅ Не инициализировали переменную
let name;
 
// ✅ Нет значения для возврата
function process() {
  // Ничего не возвращаем
}
 
// ✅ Нет свойства
const obj = {};
console.log(obj.nonExistent); // undefined

Используй null когда:

// ✅ Явно указываете "пусто"
let user = null; // Пока нет пользователя
 
// ✅ Очищаете значение
user = {name: 'Иван'};
user = null; // Явно очистили
 
// ✅ Не нашли данные
function findUser(id) {
  // Поиск в базе
  if (!found) {
    return null; // Явно "не найден"
  }
}

Частые ошибки

Смешивать null и undefined

// ❌ Ошибка — не понимать разницу
let value1 = null;
let value2;
 
if (value1 == value2) {
  console.log('Одинаковые'); // true! Но это разные вещи
}
 
// ✅ Правильно — проверять точно
if (value1 === null && value2 === undefined) {
  console.log('Разные типы пустоты');
}

Использовать == вместо ===

// ❌ Ошибка — нестрогое сравнение
if (value == null) { /* ... */ } // Сработает и для null, и для undefined
 
// ✅ Правильно — строгое сравнение
if (value === null) { /* ... */ } // Только для null

Простые правила

  1. undefined — “случайная” пустота 🆕
  2. null — “намеренная” пустота 🚫
  3. undefined — по умолчанию от JavaScript 🤖
  4. null — ставим сами, когда нужно 🙋‍♂️
  5. == — считает их равными (осторожно!) ⚠️
  6. === — различает их точно 🎯

Понимание разницы между null и undefined помогает писать более точный код! 💪


Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪