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

Какие особенности логических операторов важно учитывать на практике и почему?

Основы языка

Особенности логических операторов: короткое замыкание (не вычисляют лишнее), возврат операнда (не 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). ?? нельзя смешивать с &&/|| без скобок.

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