В чем разница между null и undefined в JavaScript?

«В чем разница между null и undefined в JavaScript?» — вопрос из категории JavaScript, который задают на 40% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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 — это намеренное указание на отсутствие какого-либо объектного значения.

Видео-ответы