PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

В чем разница между операторами && и ??

Основы языка

`&&` (И) и `??` (нулевое слияние) различаются условием: `&&` возвращает правый операнд, если левый истинный, а `??` — правый, только если левый `null` или `undefined`.

&& (логическое И)

Возвращает первый ложный операнд или последний, если все истинны. Реагирует на все falsy (false, 0, '', null, undefined, NaN):

'a' && 'b'; // 'b' — левый истинный
0 && 'b';    // 0 — левый ложный
'' && 'b';   // '' — левый ложный

Применение: условное выполнение, защита от null, рендер по условию.

?? (нулевое слияние)

Возвращает правый операнд, только если левый — null или undefined (не реагирует на 0, '', false):

null ?? 'default';      // 'default'
undefined ?? 'default'; // 'default'
0 ?? 'default';         // 0 — не null/undefined
'' ?? 'default';        // '' — не null/undefined
false ?? 'default';     // false

Применение: значения по умолчанию только для отсутствующих значений.

Главное различие

  • && — про истинность (все falsy считаются «ложью»).
  • ?? — только про null/undefined (0, '', false — валидные значения).

Практический пример

const count = value ?? 0;  // 0 останется 0
const count2 = value || 0; // 0/''/false заменятся на 0 — часто ошибка

Коротко для собеседования

&& реагирует на все falsy (возвращает первый ложный или последний) — для условий и защиты от null. ?? реагирует только на null/undefined (0, '', false — валидны) — для значений по умолчанию. ?? точнее || для дефолтов, когда 0 и '' — допустимые значения.

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