96 lines
5.3 KiB
Markdown
96 lines
5.3 KiB
Markdown
|
---
|
|||
|
title: Logical Operators
|
|||
|
localeTitle: Логические операторы
|
|||
|
---
|
|||
|
# Логические операторы
|
|||
|
|
|||
|
Логические операторы сравнивают логические значения и возвращают булевский ответ. Существует два типа логических операторов: логическое И и логическое ИЛИ. Эти операторы часто записываются как && для AND, а || для OR.
|
|||
|
|
|||
|
#### Логическое И (&&)
|
|||
|
|
|||
|
Оператор AND сравнивает два выражения. Если первый оценивается как [«правдивый»](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) , оператор возвращает значение второго выражения. Если первый оценивается как [«ложный»](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) , оператор возвращает значение первого выражения.
|
|||
|
|
|||
|
Если задействовать только логические значения ( `true` или `false` ), он возвращает true, если только если оба выражения истинны. Если одно или оба выражения ложны, весь оператор вернет false.
|
|||
|
|
|||
|
```js
|
|||
|
true && true //returns the second value, true
|
|||
|
true && false //returns the second value, false
|
|||
|
false && false //returns the first value, false
|
|||
|
123 && 'abc' // returns the second value, 'abc'
|
|||
|
'abc' && null //returns the second value, null
|
|||
|
undefined && 'abc' //returns the first value, undefined
|
|||
|
0 && false //returns the first value, 0
|
|||
|
```
|
|||
|
|
|||
|
#### Логическое ИЛИ (||)
|
|||
|
|
|||
|
Оператор OR сравнивает два выражения. Если первый оценивается как «ложный», оператор возвращает значение второго второго выражения. Если первый оценивается как «правдивый», оператор возвращает значение первого выражения.
|
|||
|
|
|||
|
Если задействовать только логические значения ( `true` или `false` ), он возвращает true, если любое выражение истинно. Оба выражения могут быть истинными, но для достижения истины необходимо только одно.
|
|||
|
|
|||
|
```js
|
|||
|
true || true //returns the first value, true
|
|||
|
true || false //returns the first value, true
|
|||
|
false || false //returns the second value, false
|
|||
|
123 || 'abc' // returns the first value, 123
|
|||
|
'abc' || null //returns the first value, 'abc'
|
|||
|
undefined || 'abc' //returns the second value, 'abc'
|
|||
|
0 || false //returns the second value, false
|
|||
|
```
|
|||
|
|
|||
|
#### Оценка короткого замыкания
|
|||
|
|
|||
|
&& и || ведут себя как операторы короткого замыкания.
|
|||
|
|
|||
|
В случае логического И, если первый операнд возвращает false, второй операнд никогда не оценивается и возвращается первый операнд.
|
|||
|
|
|||
|
В случае логического ИЛИ, если первое значение возвращает true, второе значение никогда не оценивается и возвращается первый операнд.
|
|||
|
|
|||
|
#### Логическое НЕ (!)
|
|||
|
|
|||
|
Оператор NOT не сравнится с операторами AND и OR. Кроме того, он работает только с 1 операндом.
|
|||
|
|
|||
|
«!» (восклицательный знак) используется для представления оператора NOT.
|
|||
|
|
|||
|
###### Использование операторов NOT
|
|||
|
|
|||
|
1. преобразование выражения в булево.
|
|||
|
2. возвращает обратное значение булева, полученное на последнем шаге.
|
|||
|
|
|||
|
```js
|
|||
|
var spam = 'rinki'; //spam may be equal to any non empty string
|
|||
|
var booSpam = !spam;
|
|||
|
/*returns false
|
|||
|
since when a non-empty string when converted to boolean returns true
|
|||
|
inverse of which is evaluated to false.
|
|||
|
*/
|
|||
|
|
|||
|
var spam2 = ''; //spam2 here is equal to empty string
|
|||
|
var booSpam2 = !spam2;
|
|||
|
/*returns true
|
|||
|
since when a empty string when converted to boolean returns false
|
|||
|
inverse of which is evaluated to true.
|
|||
|
*/
|
|||
|
```
|
|||
|
|
|||
|
#### Советы:
|
|||
|
|
|||
|
Оба логических оператора вернут значение последнего оцениваемого выражения. Например:
|
|||
|
|
|||
|
```js
|
|||
|
"cat" && "dog" //returns "dog"
|
|||
|
"cat" && false //returns false
|
|||
|
0 && "cat" //returns 0 (which is a falsy value)
|
|||
|
|
|||
|
"cat" || "dog" //returns "cat"
|
|||
|
"cat" || false //returns "cat"
|
|||
|
0 || "cat" //returns "cat"
|
|||
|
```
|
|||
|
|
|||
|
Обратите внимание: где `&&` возвращает первое значение, `||` возвращает второе значение и наоборот.
|
|||
|
|
|||
|
#### Дополнительная информация:
|
|||
|
|
|||
|
* [Таблица истины Javascript](https://guide.freecodecamp.org/javascript/truth-table)
|
|||
|
|
|||
|
* [MDN](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/Logical_Operators)
|