Краткое описание: в этом уроке вы узнаете, как использовать логические операторы JavaScript, включая логический оператор NOT ( !
), логический оператор AND ( &&
) и логический оператор OR ( ||
).
Логические операторы важны в JavaScript, поскольку они позволяют сравнивать переменные и делать что-то на основе результата этого сравнения.
Например, если результат сравнения true
, вы можете выполнить блок кода; если false
, вы можете выполнить другой блок кода.
JavaScript предоставляет три логических оператора:
- ! (логическое НЕ)
- || (логическое ИЛИ)
- && (логическое И).
1) Логический оператор NOT (!)
JavaScript использует восклицательный знак !
для обозначения логического оператора NOT. Оператор !
можно применять к одному значению любого типа, а не только к булеву значению.
Когда вы применяете оператор !
к булеву значению, !
возвращает true
, если значение false
и наоборот. Например:
Code language: JavaScript (javascript)let eligible = false, required = true; console.log(!eligible); console.log(!required);
Вывод:
Code language: JavaScript (javascript)true false
В этом примере eligible
равно true
, поэтому !eligible
возвращает false
. А поскольку required
является true
, !required
возвращает false
.
Когда вы применяете оператор !
к небулевому значению. Оператор !
сначала преобразует значение в булево значение, а затем отрицает его.
Следующий пример показывает, как использовать оператор !
:
!a
Логический оператор !
работает по следующим правилам:
- Если
a
являетсяundefined
, результатом будетtrue
. - Если
a
являетсяnull
, результатом будетtrue
. - Если
a
— число, отличное от0
, результатом будетfalse
. - Если
a
—NaN
, результатом будетtrue
. - Если a — объект, результатом будет false.
- Если a — пустая строка, результатом будет true. В случае, если
a
— непустая строка, результатом будетfalse
.
Ниже показаны результаты применения логического оператора !
к небулевым значениям:
Code language: JavaScript (javascript)console.log(!undefined); // true console.log(!null); // true console.log(!20); //false console.log(!0); //true console.log(!NaN); //true console.log(!{}); // false console.log(!''); //true console.log(!'OK'); //false console.log(!false); //true console.log(!true); //false
Двойное отрицание (!!
)
Иногда в коде можно встретить двойное отрицание (!!
). В !!
дважды используется логический оператор NOT (!
) для преобразования значения в его реальное булево значение.
Результат такой же, как и при использовании функции Boolean(). Например:
Code language: JavaScript (javascript)let counter = 10; console.log(!!counter); // true
Первый оператор !
отрицает булево значение переменной counter
. Если counter
является true
, то оператор !
делает его ложным и наоборот.
Второй оператор !
отрицает результат первого оператора !
и возвращает реальное булево значение переменной counter
.
2) Логический оператор AND (&&
)
JavaScript использует двойной амперсанд (&&
) для представления логического оператора AND. В следующем выражении используется оператор &&
:
Code language: JavaScript (javascript)let result = a && b;
Если a
может быть преобразовано в true
, оператор &&
возвращает b
; в противном случае он возвращает a
. Фактически, это правило применяется ко всем булевым значениям.
Следующая таблица истинности иллюстрирует результат оператора &&
, когда он применяется к двум булевым значениям:
a | b | a && b |
---|---|---|
истина | истинно | правда |
истинно | ложный | false |
ложный | истинный | false |
false | false | false |
Результат оператора &&
является истинным, только если оба значения true
, в противном случае он false
. Например:
Code language: JavaScript (javascript)let eligible = false, required = true; console.log(eligible && required); // false
В данном примере eligible
является false
, поэтому значение выражения eligible && required
является false
.
См. следующий пример:
Code language: JavaScript (javascript)let eligible = true, required = true; console.log(eligible && required); // true
В этом примере и eligible
, и required
являются true
, поэтому значение выражения eligible && required
равно true
.
Оценка замыкания
Оператор &&
является короткозамкнутым. Это означает, что оператор &&
оценивает второе значение только в том случае, если первого не достаточно для определения значения выражения. Например:
Code language: JavaScript (javascript)let b = true; let result = b && (1 / 0); console.log(result);
Вывод:
Code language: JavaScript (javascript)Infinity
В данном примере b
является true
, поэтому оператор &&
не смог определить результат без дополнительной оценки второго выражения (1/0
).
Результатом является Infinity
, которое является результатом выражения (1/0
). Однако:
Code language: JavaScript (javascript)let b = false; let result = b && (1 / 0); console.log(result);
Вывод:
Code language: JavaScript (javascript)false
В данном случае b
равно false
, оператору &&
не нужно оценивать второе выражение, поскольку он может определить конечный результат как false
на основе значения первого значения.
Цепочка операторов &&
В следующем выражении используется несколько операторов &&
:
Code language: JavaScript (javascript)let result = value1 && value2 && value3;
Оператор &&
несет в себе следующее:
- Оценивает значения слева направо.
- Для каждого значения преобразует его в булево значение. Если результат
false
, останавливается и возвращает исходное значение. - Если все значения истинны, возвращает последнее значение.
Другими словами, оператор &&
возвращает первое ложное значение или последнее значение, если таковых не было найдено.
Если значение может быть преобразовано в true
, оно называется истинностным значением. Если значение может быть преобразовано в false
, то это так называемое ложное значение.
3) Оператор логического ИЛИ (||
)
JavaScript использует двойную трубу ||
для представления оператора логического ИЛИ. Вы можете применить оператор ||
к двум значениям любого типа:
Code language: JavaScript (javascript)let result = a || b;
Если a
может быть преобразовано в true
, возвращается a
; иначе возвращается b
. Это правило также применяется к булевым значениям.
Следующая таблица истинности иллюстрирует результат оператора ||
в зависимости от значения операндов:
a | b | a || b |
---|---|---|
истина | истина | истинно |
истинно | ложный | истинный |
ложный | истинный | истинный |
false | false | false |
Оператор ||
возвращает false
, если оба значения равны false
. В случае если одно из значений равно true
, оператор ||
возвращает true
. Например:
Code language: JavaScript (javascript)let eligible = true, required = false; console.log(eligible || required); // true
Смотрите другой пример:
Code language: JavaScript (javascript)let eligible = false, required = false; console.log(eligible || required); // false
В этом примере выражение eligible || required
возвращает false
, потому что оба значения false
.
Оператор ||
также является замыкающим.
Как и оператор &&
, оператор ||
является короткозамкнутым. Это означает, что если первое значение оценивается как true
, оператор &&
не оценивает второе.
Цепочка операторов ||
Следующий пример показывает, как использовать несколько операторов || в выражении:
Code language: JavaScript (javascript)let result = value1 || value2 || value3;
Оператор ||
делает следующее:
- Оценивает значения слева направо.
- Для каждого значения преобразует его в булево значение. Если результатом преобразования является
true
, останавливается и возвращает значение. - Если все значения были оценены как
false
, возвращается последнее значение.
Другими словами, цепочка операторов ||
возвращает первое истинное значение или последнее, если истинное значение не было найдено.
Старшинство логических операторов
Когда вы смешиваете логические операторы в выражении, движок JavaScript оценивает операторы в определенном порядке. Этот порядок называется старшинством оператора.
Другими словами, старшинство оператора — это порядок оценки логических операторов в выражении.
Приоритет логического оператора находится в следующем порядке от высшего к низшему:
- Логический NOT (!)
- Логическое И (&&)
- Логическое ИЛИ (||)
Резюме
- Оператор NOT (
!
) отрицает булево значение. Оператор (!!
) преобразует значение в его реальное булево значение. - Оператор AND (
&&
) применяется к двум булевым значениям и возвращает true, если оба значения истинны. - Оператор OR (
||
) применяется к двум булевым значениям и возвращаетtrue
, если один из операндовtrue
. - Оба оператора
&&
и||
являются замыкающими. Они также могут применяться к небулевым значениям. - Приоритет логических операторов от высшего к низшему:
!
,&&
и||
.