PassFront
  1. PassFront
  2. База знаний
  3. Современный JS ES6+

Зачем нужен оператор 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). Удобен с ?.. Есть ??=.

Другие вопросы раздела