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