Зачем нужен оператор nullish coalescing `??`?
Современный JS ES6+
Оператор `??` (nullish coalescing) нужен, чтобы задать значение по умолчанию только когда левый операнд `null` или `undefined`, не срабатывая на другие falsy-значения (0, '', false).
Что делает
Возвращает правый операнд, только если левый — null или undefined:
null ?? 'default'; // 'default'
undefined ?? 'default'; // 'default'
0 ?? 'default'; // 0 — не null/undefined
'' ?? 'default'; // '' — не null/undefined
false ?? 'default'; // falseЗачем нужен — проблема с ||
|| срабатывает на все falsy (0, '', false, NaN), что часто нежелательно:
const count = value || 10; // если value = 0 → станет 10 (ошибка!)
const count = value ?? 10; // если value = 0 → останется 0 (правильно)?? реагирует только на отсутствие значения (null/undefined), а 0, '', false считает валидными.
Применения
Значения по умолчанию
const name = user.name ?? 'Гость';
const timeout = config.timeout ?? 5000; // 0 — валидное значениеС опциональной цепочкой
const city = user?.address?.city ?? 'Не указан';Присваивание (??=)
options.limit ??= 20; // задать, только если null/undefinedОграничение
Нельзя смешивать с &&/|| без скобок:
a ?? b || c; // SyntaxError
(a ?? b) || c; // окКоротко для собеседования
?? (nullish coalescing) задаёт значение по умолчанию только для null/undefined, не срабатывая на 0, '', false (в отличие от ||, который реагирует на все falsy). Нужен, когда 0/'' — валидные значения (count ?? 10). Удобен с ?.. Есть ??=.