Skip to main content

Условия и логические операторы

Условное ветвление: if, '?'

Инструкция if(...) вычисляет условие в скобках и, если результат true, то выполняет блок кода.

Несколько условий: «else if»

Конструкция "switch"

let a = 2 + 2;

switch (a) {
case 3:
alert( 'Маловато' );
break;
case 4:
alert( 'В точку!' );
break;
case 5:
alert( 'Перебор' );
break;
default:
alert( "Нет таких значений" );
}

Условный оператор „?“ (тернарный)

let result = условие ? значение1 : значение2;

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

В JavaScript есть семь логических операторов:

  • || (ИЛИ)
  • ||= (Оператор логического присваивания ИЛИ)
  • && (И)
  • &&= (Оператор логического присваивания И)
  • ! (НЕ)
  • ?? (Оператор нулевого слияния)
  • ??= (Оператор нулевого присваивания)

|| (ИЛИ)

( true || true ); // true 
( false || true ); // true
( true || false ); // true
( false || false ); // false

ИЛИ "||" находит первое истинное значение

( 1 || 0 ); // 1 (1 - истинное значение) 
( true || 'какая-то строка' ); // true
( null || 1 ); // 1 (первое истинное значение)
( null || 0 || 1 ); // 1 (первое истинное значение)
( undefined || null || 0 ); // 0 (поскольку все ложно, возвращается последнее значение)

||= (Логическое присваивание ИЛИ)

a ||= b;

Оператор ||= принимает два операнда и выполняет следующие действия:

  • Вычисляет операнды слева направо.
  • Конвертирует a в логическое значение.
  • Если a ложно, присваивает a значение b.

&& (И)

( true && true ); // true 
( false && true ); // false
( true && false ); // false
( false && false ); // false

И «&&» находит первое ложное значение

result = value1 && value2 && value3;

Оператор && выполняет следующие действия:

  • Вычисляет операнды слева направо.
  • Каждый операнд преобразует в логическое значение. Если результат false, останавливается и возвращает исходное значение этого операнда.
  • Если все операнды были истинными, возвращается последний.

Другими словами, И возвращает первое ложное значение. Или последнее, если ничего не найдено.

Вышеуказанные правила схожи с поведением ИЛИ. Разница в том, что И возвращает первое ложное значение, а ИЛИ первое истинное.

Приоритет оператора && больше, чем у ||
Приоритет оператора И && больше, чем ИЛИ ||, так что он выполняется раньше.

Таким образом, код a && b || c && d по существу такой же,
как если бы выражения && были в круглых скобках: (a && b) || (c && d)

Не заменяйте if на || или &&
Несмотря на то, что вариант с && кажется более коротким, if более нагляден и, как правило, более читабелен.

&&= (Логическое присваивание И)

a &&= b;

Принцип действия &&= практически такой же, как и у оператора логического присваивания ИЛИ ||=.
Единственное отличие заключается в том, что &&= присвоит a значение b только в том случае, если a истинно.

! (НЕ)

result = !value;

Оператор принимает один аргумент и выполняет следующие действия:

  1. Сначала приводит аргумент к логическому типу true/false.
  2. Затем возвращает противоположное значение.

❗ Приоритет НЕ ! является наивысшим из всех логических операторов, поэтому он всегда выполняется первым, перед **&& ** или ||.

Оператор нулевого слияния (??)

Результат выражения a ?? b будет следующим:

  • если a определено, то a,
  • если a не определено, то b.

Иначе говоря, оператор ?? возвращает первый аргумент, если он не null/undefined, иначе второй.

Сравнение с ||

Важное различие между ними заключается в том, что:

  • || возвращает первое истинное значение.
  • ?? возвращает первое определённое значение.

Приоритет оператора ?? такой же, как и у ||. Они оба равны 3 в таблице на MDN.

Использование ?? вместе с && или ||

По соображениям безопасности JavaScript запрещает использование оператора ?? вместе с && и ||, если приоритет явно не указан при помощи круглых скобок.

let x = 1 && 2 ?? 3; // Синтаксическая ошибка

Используйте скобки, чтобы обойти это ограничение:

let x = (1 && 2) ?? 3; // Работает без ошибок

Оператор нулевого присваивания (??=)

Предположим, нам необходимо проверить, равна ли переменная null или undefined, и если это так — присвоить этой переменной какое-либо другое значение.

let userAge = null;

if (userAge === null || userAge === undefined) {
userAge = 18;
}

Выглядит громоздко, правда? Существует оператор, более подходящий для подобных задач.

x ??= y

Оператор ??= присвоит x значение y только в том случае, если x не определено (null/undefined).

let userAge = null;
userAge ??= 18;
alert(userAge) // 18

🚀 Источник if-else: https://learn.javascript.ru/ifelse 🚀 Источник logical ops: https://learn.javascript.ru/logical-operators 🚀 Источник nullish ops: https://learn.javascript.ru/nullish-operators