From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../index.html" | 299 +++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 "files/ru/web/javascript/reference/operators/\320\273\320\276\320\263\320\270\321\207\320\265\321\201\320\272\320\270\320\265_\320\276\320\277\320\265\321\200\320\260\321\202\320\276\321\200\321\213/index.html" (limited to 'files/ru/web/javascript/reference/operators/логические_операторы') diff --git "a/files/ru/web/javascript/reference/operators/\320\273\320\276\320\263\320\270\321\207\320\265\321\201\320\272\320\270\320\265_\320\276\320\277\320\265\321\200\320\260\321\202\320\276\321\200\321\213/index.html" "b/files/ru/web/javascript/reference/operators/\320\273\320\276\320\263\320\270\321\207\320\265\321\201\320\272\320\270\320\265_\320\276\320\277\320\265\321\200\320\260\321\202\320\276\321\200\321\213/index.html" new file mode 100644 index 0000000000..43878ea58c --- /dev/null +++ "b/files/ru/web/javascript/reference/operators/\320\273\320\276\320\263\320\270\321\207\320\265\321\201\320\272\320\270\320\265_\320\276\320\277\320\265\321\200\320\260\321\202\320\276\321\200\321\213/index.html" @@ -0,0 +1,299 @@ +--- +title: Логические операторы +slug: Web/JavaScript/Reference/Operators/Логические_операторы +translation_of: Web/JavaScript/Reference/Operators +--- +
{{jsSidebar("Operators")}}
+ +
Логические операторы используются, как правило, с примитивами {{jsxref("Boolean")}} (логического) типа. В этом случае результатом работы оператора является значение типа Boolean. Между тем операторы && и || возвращают, вообще говоря, значение одного из операнда, потому при использовании в качестве аргументов этих операторов величин, тип которых отличен от Boolean, тип возвращаемого значения может быть отличным от Boolean.
+ +
+ +

Описание

+ +

В таблице приведены описания логических операторов:

+ + + + + + + + + + + + + + + + + + + + + + + + +
ОператорИспользованиеОписание
Логическое И (&&)expr1 && expr2Возвращает значение expr1, если оно может быть преобразовано в false; иначе возвращает значение expr2. Таким образом, при использовании с величинами типа Boolean оператор && вернет true, если оба операнда могут быть преобразованы в true; иначе оператор && вернет false. 
Логическое ИЛИ (||)expr1 || expr2 +

Возвращает значение expr1, если оно может быть преобразовано в true; иначе возвращает значение expr2. Таким образом, при использовании с величинами типа Boolean оператор || вернет true если хоть один из них равен true; в других случаях вернет false.

+
Логическое НЕ (!)!exprВозвращает false если значение expr можно привести к true;  в противоположном случае возвращает true.
+ +

Примеры значений выражений, которые могут быть преобразованы в false:

+ + + +

Хоть операторы && и || могут использовать операнды с не булевыми значениями, но они всёравно рассматриваются, как булевы операторы, т.к. их возвращаемые ими значения всегда могут быть сконвертированы в булевы значения.

+ +

Короткая схема вычислений

+ +

Так как логические операторы выполняются слева направо, они проверяются на "короткие вычисления" по следующим правилам:

+ + + +

Часть выражения (anything) не вычисляется. Если в ней есть вызов функции, то эта функция не будет вызвана.

+ +

Например, следующие две функции делают одно и тоже:

+ +
function shortCircuitEvaluation() {
+  doSomething() || doSomethingElse()
+}
+
+function equivalentEvaluation() {
+  var flag = doSomething();
+  if (!flag) {
+    doSomethingElse();
+  }
+}
+
+ +

Однако, следующие выражения дают разный результат в связи с приоритетом операторов.

+ +
false && true  || true      // вернёт true
+false && (true || true)     // вернёт false
+ +

Логическое И (&&)

+ +

Следующий код показывает пример оператора && (логическое И).

+ +
a1 = true  && true      // t && t вернёт true
+a2 = true  && false     // t && f вернёт false
+a3 = false && true      // f && t вернёт false
+a4 = false && (3 == 4)  // f && f вернёт false
+a5 = "Cat" && "Dog"     // t && t вернёт "Dog"
+a6 = false && "Cat"     // f && t вернёт false
+a7 = "Cat" && false     // t && f вернёт false
+
+ +

Логическое ИЛИ (||)

+ +

Это код представляет собой пример оператора || (логическое ИЛИ).

+ +
o1 = true  || true       // t || t вернёт true
+o2 = false || true       // f || t вернёт true
+o3 = true  || false      // t || f вернёт true
+o4 = false || (3 == 4)   // f || f вернёт false
+o5 = "Cat" || "Dog"      // t || t вернёт "Cat"
+o6 = false || "Cat"      // f || t вернёт "Cat"
+o7 = "Cat" || false      // t || f вернёт "Cat"
+
+ +

Логическое НЕ (!)

+ +

Следующий код является примером оператора ! (логическое НЕ).

+ +
n1 = !true              // !t вернёт false
+n2 = !false             // !f вернёт true
+n3 = !"Cat"             // !t вернёт false
+
+ +

Правила преобразования

+ +

Конвертирование И в ИЛИ

+ +

следующая операция использует булев тип:

+ +
bCondition1 && bCondition2
+ +

это всегда равно:

+ +
!(!bCondition1 || !bCondition2)
+ +

Конвертирование ИЛИ в И

+ +

эта операция использует булев тип:

+ +
bCondition1 || bCondition2
+ +

что эквивалентно:

+ +
!(!bCondition1 && !bCondition2)
+ +

Конвертирование многих НЕ

+ +

следующая операция использует булев тип:

+ +
!!bCondition
+ +

что равно:

+ +
bCondition
+ +

Удаление вложенных скобок

+ +

Так как логические выражения выполняются слева направо, становится возможным удалить круглые скобки из комплексного выражения, следуя следующим правилам.

+ +

Удаление вложенных И

+ +

Это составное выражение использует булев тип:

+ +
bCondition1 || (bCondition2 && bCondition3)
+ +

что будет равным:

+ +
bCondition1 || bCondition2 && bCondition3
+ +

Удаление вложенного ИЛИ

+ +

Следующее составное выражение использует булев тип:

+ +
bCondition1 && (bCondition2 || bCondition3)
+ +

всегда равно:

+ +
!(!bCondition1 || !bCondition2 && !bCondition3)
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES5.1')}}{{Spec2('ES1')}}Изначальное определение
{{SpecName('ES5.1', '#sec-11.11')}}{{Spec2('ES5.1')}}Определено в нескольких секциях спецификации: Логический оператор НЕ, Бинарные логические операторы
{{SpecName('ES6', '#sec-binary-logical-operators')}}{{Spec2('ES6')}}Определено в нескольких секциях спецификации: Логический оператор НЕ, Бинарные логические операторы
{{SpecName('ESDraft', '#sec-binary-logical-operators')}}{{Spec2('ESDraft')}}Определено в нескольких секциях спецификации: Логический оператор НЕ, Бинарные логические операторы
+ +

Поддержка браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Логическое И (&&){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Логическое ИЛИ (||){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Логическое НЕ (!){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ВозможностьAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Логическое И (&&){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Логическое ИЛИ (||){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Логическое НЕ (!){{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

Смотрите также

+ + -- cgit v1.2.3-54-g00ecf