Прикладной код

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

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

Описание

Логические операторы используются с логическими (булевыми) значениями и возвращают логическое значение. В этом случае результатом работы оператора будет значение типа Boolean.

Однако, в JavaScript операторы && и || возвращают не булево значение, а один из операндов, определивший значение выражения. Для данных операторов конечный результат можеть являться не булевым.

Логические операторы описаны следующей таблицей:

Оператор

Использование

Описание

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

expr1 && expr2

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

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

expr1 || expr2

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

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

!expr

Возвращает false, если операнд может быть преобразован к true, в ином случае возвращает true.

Null, 0, NaN, пустая строка ("") и undefined преобразуются к false.

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

Оператор ! также используется для быстрого преобразования выражения к булевому значению:

!!"string" = true;
!!null = false;

Сокращенные вычисления

Так как логические выражения вычисляются слева направо, они проверяются на возможность «сокращенных вычислений» по следующим правилам:

  • false && что угодно становится false;
  • true || что угодно становится true.

Данное правило гарантирует, что результат всегда правильный, не производя при этом лишних вычислений. В итоге, невычисленные выражения не дадут побочных эффектов:

a = 1 check = 5 || (a = 3); 
alert(a); // 1

Примеры

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

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 = "Кошка" && "Собака"     // t && t вернёт "Собака"
a6 = false && "Кошка"     // f && t вернёт false
a7 = "Кошка" && false     // t && f вернёт false

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

a1 = true  || true       // t || t вернёт true
a2 = false || true       // f || t вернёт true
a3 = true  || false      // t || f вернёт true
a4 = false || (3 == 4)   // f || f вернёт false
a5 = "Кошка" || "Собака"      // t || t вернёт "Кошка"
a6 = false || "Кошка"      // f || t вернёт "Кошка"
a7 = "Кошка" || false      // t || f вернёт "Кошка"

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

a1 = !true   // !t вернёт false
a2 = !false   // !f вернёт true
a3 = !"Кошка"   // !t вернёт false