В чем разница между операторами && и ??
Основы языка
`&&` (И) и `??` (нулевое слияние) различаются условием: `&&` возвращает правый операнд, если левый истинный, а `??` — правый, только если левый `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 и '' — допустимые значения.