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

В чем разница между логическими операторами && и ||?

Основы языка

Логические операторы `&&` (И) и `||` (ИЛИ) различаются логикой и возвращаемым значением: `&&` возвращает первое ложное (или последнее), `||` — первое истинное (или последнее).

&& (И)

Возвращает первое ложное значение, или последнее, если все истинны:

true && 'a';   // 'a' — оба истинны, вернул последний
'a' && 'b';    // 'b'
0 && 'a';       // 0 — первое ложное
'a' && null;    // null

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

user && user.name;      // name, если user есть
isValid && submit();    // submit, если isValid
{isVisible && <Modal />} // рендер по условию (React)

|| (ИЛИ)

Возвращает первое истинное значение, или последнее, если все ложны:

false || 'a';      // 'a' — первое истинное
'' || 'default';   // 'default'
'a' || 'b';        // 'a'
0 || null;         // null

Применение: значения по умолчанию (но срабатывает на все falsy):

const name = input || 'Гость'; // но '' и 0 тоже заменятся!

Короткое замыкание

Оба не вычисляют правую часть, если результат уже известен:

false && expensiveCall(); // expensiveCall НЕ вызовется
true || expensiveCall();  // expensiveCall НЕ вызовется

Нюанс с ||

|| срабатывает на все falsy (0, '', false). Для значений по умолчанию только на null/undefined используют ??.

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

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

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