Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Логические операторы

Логические операторы объединяют несколько условий в одно: «возраст больше 18 и есть билет», «выходной или праздник». Результат обычно — true или false, и его используют в if.

И — &&

Оператор && даёт true, только когда истинны обе части:

console.log(true && false); // false

На практике по обе стороны стоят сравнения:

const age = 20;
const hasTicket = true;
 
console.log(age >= 18 && hasTicket); // true

ИЛИ — ||

Оператор || даёт true, когда истинна хотя бы одна часть. Ложь получается, только если ложны обе:

const day = 'суббота';
 
console.log(day === 'суббота' || day === 'воскресенье'); // true

НЕ — !

Оператор ! переворачивает значение: истину делает ложью, а ложь — истиной. Он ставится перед значением:

const isLoggedIn = false;
 
console.log(!isLoggedIn); // true

Удобно читать ! как «не»: !isLoggedIn — «не вошёл в систему».

Приоритет

! выполняется первым, затем &&, и только потом || — так же, как умножение выполняется раньше сложения. В сложных условиях лучше расставить скобки, чтобы порядок был виден сразу:

const isAdmin = false;
const isOwner = true;
const isBlocked = false;
 
console.log((isAdmin || isOwner) && !isBlocked); // true

Значение по умолчанию

На самом деле || возвращает не просто true или false, а одно из своих значений: первое истинное или последнее. Этим пользуются, чтобы подставить запасное значение:

const nickname = '';
 
console.log(nickname || 'Гость'); // Гость

Похожий оператор ?? возвращает правую часть, только если левая равна null или undefined. Ноль и пустую строку он считает нормальными значениями:

const count = 0;
 
console.log(count || 10); // 10
console.log(count ?? 10); // 0

Если ноль — допустимое значение, например количество товаров, используйте ??.

Частая ошибка

Нельзя сравнить переменную сразу с несколькими значениями, перечислив их через ||. Правая часть здесь — просто непустая строка, а она всегда истинна:

const day = 'понедельник';
 
console.log(day === 'суббота' || 'воскресенье'); // воскресенье

Сравнение нужно повторить для каждого значения: day === 'суббота' || day === 'воскресенье'.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.