Какие особенности логических операторов важно учитывать на практике и почему?
Основы языка
Особенности логических операторов: короткое замыкание (не вычисляют лишнее), возврат операнда (не boolean), реакция на falsy у `||`/`&&` против null/undefined у `??`.
Особенности
Короткое замыкание
&& и || не вычисляют правую часть, если результат уже известен:
false && expensive(); // expensive НЕ вызовется
true || expensive(); // expensive НЕ вызоветсяИспользуют для условного выполнения и оптимизации.
Возвращают операнд, не boolean
Возвращают значение одного из операндов, а не true/false:
'a' && 'b'; // 'b' (последний, оба истинны)
0 || 'x'; // 'x' (первый истинный)
null && 'a'; // nullЭто позволяет значения по умолчанию и защиту от null.
Реакция на falsy vs null/undefined
- || срабатывает на все falsy (
0,'',false,null,undefined,NaN):
0 || 'default'; // 'default' — 0 считается falsy (часто баг)- ?? — только на
null/undefined:
0 ?? 'default'; // 0 — сохраненоНельзя смешивать ?? с &&/|| без скобок
a ?? b || c; // SyntaxError
(a ?? b) || c; // окПрактические выводы
- Значения по умолчанию только для отсутствующих →
??, не||. - Защита от null →
&&или?.. - Условный рендер в JSX →
&&(осторожно с0).
Коротко для собеседования
Особенности логических операторов: короткое замыкание (не вычисляют лишнее — для условного выполнения), возврат операнда (значение, не boolean — для дефолтов и защиты от null), ||/&& реагируют на все falsy, а ?? — только на null/undefined (поэтому count ?? 0 точнее count || 0). ?? нельзя смешивать с &&/|| без скобок.