Как в js пишется логическое или
Перейти к содержимому

Как в js пишется логическое или

  • автор:

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

Здесь мы рассмотрим первые пять, операторы ?? и ??= будет в следующей статье.

Несмотря на своё название, данные операторы могут применяться к значениям любых типов. Полученные результаты также могут иметь различный тип.

Давайте рассмотрим их подробнее.

|| (ИЛИ)

Оператор «ИЛИ» выглядит как двойной символ вертикальной черты:

result = a || b;

Традиционно в программировании ИЛИ предназначено только для манипулирования булевыми значениями: в случае, если какой-либо из аргументов true , он вернёт true , в противоположной ситуации возвращается false .

В JavaScript, как мы увидим далее, этот оператор работает несколько иным образом. Но давайте сперва посмотрим, что происходит с булевыми значениями.

Существует всего четыре возможные логические комбинации:

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

Как мы можем наблюдать, результат операций всегда равен true , за исключением случая, когда оба аргумента false .

Если значение не логического типа, то оно к нему приводится в целях вычислений.

Например, число 1 будет воспринято как true , а 0 – как false :

if (1 || 0) < // работает как if( true || false ) alert( 'истинно!' ); >

Обычно оператор || используется в if для проверки истинности любого из заданных условий.

let hour = 9; if (hour < 10 || hour >18)

Можно передать и больше условий:

let hour = 12; let isWeekend = true; if (hour < 10 || hour >18 || isWeekend) < alert( 'Офис закрыт.' ); // это выходной >

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

Описанная выше логика соответствует традиционной. Теперь давайте поработаем с «дополнительными» возможностями JavaScript.

Расширенный алгоритм работает следующим образом.

При выполнении ИЛИ || с несколькими значениями:

result = value1 || value2 || value3;

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

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

Значение возвращается в исходном виде, без преобразования.

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

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

Это делает возможным более интересное применение оператора по сравнению с «чистым, традиционным, только булевым ИЛИ».

    Получение первого истинного значения из списка переменных или выражений. Например, у нас есть переменные firstName , lastName и nickName , все они необязательные (т.е. они могут быть неопределенными или иметь ложные значения). Давайте воспользуемся оператором ИЛИ || , чтобы выбрать ту переменную, в которой есть данные, и показать её (или «Аноним», если ни в одной переменной данных нет):

let firstName = ""; let lastName = ""; let nickName = "Суперкодер"; alert( firstName || lastName || nickName || "Аноним"); // Суперкодер

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

Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Более новая информация по этой теме находится на странице https://learn.javascript.ru/logical-operators.

Для операций над логическими значениями в JavaScript есть || (ИЛИ), && (И) и ! (НЕ).

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

|| (ИЛИ)

Оператор ИЛИ выглядит как двойной символ вертикальной черты:

result = a || b;

Логическое ИЛИ в классическом программировании работает следующим образом: «если хотя бы один из аргументов true , то возвращает true , иначе – false «. В JavaScript, как мы увидим далее, это не совсем так, но для начала рассмотрим только логические значения.

Получается следующая «таблица результатов»:

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

Если значение не логического типа – то оно к нему приводится в целях вычислений. Например, число 1 будет воспринято как true , а 0 – как false :

if (1 || 0) < // сработает как if( true || false ) alert( 'верно' ); >

Обычно оператор ИЛИ используется в if , чтобы проверить, выполняется ли хотя бы одно из условий, например:

var hour = 9; if (hour < 10 || hour >18)

Можно передать и больше условий:

var hour = 12, isWeekend = true; if (hour < 10 || hour >18 || isWeekend)

Короткий цикл вычислений

JavaScript вычисляет несколько ИЛИ слева направо. При этом, чтобы экономить ресурсы, используется так называемый «короткий цикл вычисления».

Допустим, вычисляются несколько ИЛИ подряд: a || b || c || . . Если первый аргумент – true , то результат заведомо будет true (хотя бы одно из значений – true ), и остальные значения игнорируются.

Это особенно заметно, когда выражение, переданное в качестве второго аргумента, имеет сторонний эффект – например, присваивает переменную.

При запуске примера ниже присвоение x не произойдёт:

var x; true || (x = 1); alert(x); // undefined, x не присвоен

…А в примере ниже первый аргумент – false , так что ИЛИ попытается вычислить второй, запустив тем самым присваивание:

var x; false || (x = 1); alert(x); // 1

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

Логический оператор И ( && ) (конъюнкция) для набора операндов со значением типа Boolean будет true только в случае, если все операнды содержат значение true . В противном случае это будет false .

В целом, оператор вернёт значение первого ложноподобного операнда при вычислении, либо значение последнего операнда, если все операнды оказались истиноподобными.

Интерактивный пример

Синтаксис

Описание

Если значение может быть преобразовано в true , то оно рассматривается как истиноподобное (truthy). Если же значение может быть преобразовано в false , то оно называется ложноподобным (falsy).

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

  • false ;
  • null ;
  • NaN ;
  • 0 ;
  • пустая строка ( «» , » , « );
  • undefined .

Оператор И возвращает небулевы значения как есть:

= "" && "foo"; // result is assigned "" (empty string) result = 2 && 0; // result is assigned 0 result = "foo" && 4; // result is assigned 4 

Несмотря на то, что оператор && может использоваться с операндами, не содержащие логических значений, он всё равно останется булевым оператором, поскольку его возвращаемое значение всегда можно преобразовать в булевый примитив. Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной оператор НЕ или конструктор Boolean (en-US).

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

Оператор логического И вычисляет выражение по сокращённой схеме. Каждый операнд приводится к булевому значению, если результат одного преобразования оказывается false , тогда оператор И останавливает дальнейшее вычисление выражения и возвращает исходное значение этого ложноподобного операнда. Поэтому оставшиеся операнды не будут вычислены.

В качестве примера рассмотрим следующий псевдокод.

(ложноподобное выражение) && следующее выражение

Поскольку первый операнд (ложноподобное выражение) имеет ложное значение, то следующее выражение никогда не будет вычислено. Если следующее выражение содержало функцию, то она бы никогда не была вызвана. Посмотрите пример ниже:

function A()  console.log("вызвана функция A"); return false; > function B()  console.log("вызвана функция B"); return true; > console.log(A() && B()); // В результате вызова функции A, в консоли будет выведено "вызвана функция A", // а оператор && вычислится как false (функция A возвращает false), поэтому далее в консоли появится false; // вследствие этого оператор И прекратит вычисление и проигнорирует функцию B 

Приоритет операторов

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

false || (true && true); // вернёт true true && (false || false); // вернёт false 2 == 3 || (4  0 && 1 == 1); // вернёт false 

Примеры

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

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

= 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 a8 = "" && false; // f && f вернёт "" a9 = false && ""; // f && f вернёт false 

Правила преобразования булевых значений

Конвертация И к ИЛИ

Следующая операция с булевыми значениями:

!(!bCondition1 || !bCondition2); 
Конвертация ИЛИ к И

Следующая операция с булевыми значениями:

|| bCondition2; 
!(!bCondition1 && !bCondition2); 

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

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

Следующая составная операция с булевыми значениями:

|| (bCondition2 && bCondition3); 

это то же самое, что и:

|| (bCondition2 && bCondition3); 

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

Specification
ECMAScript Language Specification
# prod-LogicalANDExpression

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

BCD tables only load in the browser

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

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 10 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

  • Product help
  • Report an issue

Our communities

Developers

  • Web Technologies
  • Learn Web Development
  • MDN Plus
  • Hacks Blog
  • Website Privacy Notice
  • Cookies
  • Legal
  • Community Participation Guidelines

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.

Логические операторы — Основы JavaScript

Логические выражения могут объединяться друг с другом, создавая все более хитрые проверки. Хороший пример: проверка пароля. Как вы знаете, некоторые сайты при регистрации хотят пароль от 8 до 20 символов в длину. Честно говоря, это странное ограничение, но что поделать. В математике мы бы написали 8 < x < 20 (где x это длина конкретного пароля), но в JavaScript такой трюк не пройдет. Нам придется сделать два отдельных логических выражения и соединить их специальным оператором «И»:

Вот функция, которая принимает пароль и говорит, соответствует ли он условиям, или не соответствует:

const isStrongPassword = (password) =>  const length = password.length; return length > 8 && length  20; >; isStrongPassword('qwerty'); // false isStrongPassword('qwerty1234'); // true isStrongPassword('zxcvbnmasdfghjkqwertyui'); // false 

&& — означает «И» (в математической логике это называют конъюнкцией). Все выражение считается истинным только в том случае, когда истинен каждый операнд — каждое из составных выражений. Иными словами, && означает «и то, и другое».

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

Кроме && , часто используется оператор || — «ИЛИ» (дизъюнкция). Он означает «или то, или другое, или оба». Операторы можно комбинировать в любом количестве и любой последовательности, но когда одновременно встречаются && и || , то приоритет лучше задавать скобками. Ниже пример расширенной функции определения корректности пароля:

const hasSpecialChars = (str) => /* проверяет содержание специальных символов в строке */; const hasCapitalChars = (str) => /* проверяет содержание заглавных букв в строке */; const isStrongPassword = (password) =>  const length = password.length; // Скобки задают приоритет. Понятно что к чему относится. return length > 8 && (hasSpecialChars(password) || hasCapitalChars(password)); >; 

Другой пример. Мы хотим купить квартиру, которая удовлетворяет условиям: площадь от 100 кв. метров и больше на любой улице ИЛИ площадь от 80 кв. метров и больше, но на центральной улице Main Street .

Напишем функцию, проверяющую квартиру. Она принимает два аргумента: площадь (число) и название улицы (строку):

const isGoodApartment = (area, street) =>  // Через переменную, чтобы функция была не слишком длинной const result = area >= 100 || (area >= 80 && street === 'Main Street'); return result; >; isGoodApartment(91, 'Queens Street'); // false isGoodApartment(78, 'Queens Street'); // false isGoodApartment(70, 'Main Street'); // false isGoodApartment(120, 'Queens Street'); // true isGoodApartment(120, 'Main Street'); // true isGoodApartment(80, 'Main Street'); // true 

Область математики, в которой изучаются логические операторы, называется булевой алгеброй. Ниже показаны «таблицы истинности» — по ним можно определить, каким будет результат применения оператора:

И &&

A B A && B
TRUE TRUE TRUE
TRUE FALSE FALSE
FALSE TRUE FALSE
FALSE FALSE FALSE
// true && true; 3 > 2 && 'wow'.startsWith('w'); // true // true && false; 'start' === 'start' && 8  3; // false 

ИЛИ ||

A B A || B
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE
// false || true; 3  2 || 'wow'.startsWith('w'); // true // false || false; 'start' === 'Start' || 3  3; // false 

Отрицание

Наряду с конъюнкцией (И) и дизъюнкцией (ИЛИ), часто используется операция «отрицание». Отрицание меняет логическое значение на противоположное. В программировании ему соответствует унарный оператор ! .

Если есть функция, проверяющая четность числа, то с помощью отрицания можно выполнить проверку нечетности:

const isEven = (number) => number % 2 === 0; isEven(10); // true !isEven(10); // false 

То есть мы просто добавили ! слева от вызова функции и получили обратное действие.

Отрицание — мощный инструмент, который позволяет лаконично выражать задуманные правила в коде без необходимости писать новые функции.

А что если написать так !!isEven(10) ? Внезапно, но код сработает. В логике двойное отрицание подобно отсутствию отрицания вообще.

isEven(10); // true !isEven(10); // false !!isEven(10); // true 
Дополнительные материалы
  1. Булева алгебра
  2. Конъюнкция
  3. Дизъюнкция
  4. Законы Де Моргана

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

  • Статья «Как учиться и справляться с негативными мыслями»
  • Статья «Ловушки обучения»
  • Статья «Сложные простые задачи по программированию»
  • Урок «Как эффективно учиться на Хекслете»
  • Вебинар « Как самостоятельно учиться »

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *