- Логическое ИЛИ (||)
- Интерактивный пример
- Синтаксис
- Описание
- Сокращённое вычисление
- Приоритет операторов
- Примеры
- Использование оператора ИЛИ
- Правила конвертации для булевых значений
- Конвертация И в ИЛИ
- Логические операторы в JavaScript
- Логическое И &&
- Пример №1
- Пример №2
- Пример №3
- Пример №4
- Пример №5
- Логическое ИЛИ ||
- Пример №6
- Пример №7
- Пример №8
- Пример №9
- Пример №10
- Логическое НЕ !
- Итого
- Логические операторы
- || (ИЛИ)
- Короткий цикл вычислений
Логическое ИЛИ (||)
Логический оператор ИЛИ ( || ) (дизъюнкция) для набора операндов истинен будет true только в случае, если один или несколько его операндов имеют значение true .
Обычно используется с булевыми (логическими) значениями. Тогда возвращается булевое значение. Однако фактически оператор || возвращает значение одного из операндов, поэтому если этот оператор используется с небулевыми значениями, он вернет небулевое значение.
Интерактивный пример
Синтаксис
Описание
Если expr1 может быть преобразовано в true , то вернётся expr1 ; в противном случае возвращается expr2 .
Если значение может быть преобразовано в true , то оно рассматривается как истиноподобное (truthy). Если же значение может быть преобразовано в false , то оно называется ложноподобным (falsy).
Примеры выражений, которые могут быть преобразованы в false :
Несмотря на то, что оператор || может использоваться с операндами без логических значений, это всё равно булевый оператор, поскольку его возвращаемое значение всегда можно преобразовать в булевый примитив. Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной оператор НЕ или конструктор Boolean (en-US).
Сокращённое вычисление
Оператор логического ИЛИ вычисляется слева направо, делая возможным сокращённое вычисление выражения, согласно следующему правилу:
(истинноподобное выражение) || следующее выражение — вычисление останавливается на истинноподобном выражении;
Сокращенное вычисление хорошо тем, что следующее выражение не будет вычислено, т.е. всё, связанное с ним, будет проигнорировано (например, если следующее выражение представляет собой вызов функции, то он никогда не произойдёт). Всё потому, что значение оператора известно уже после вычисления первого операнда. Посмотрите на пример:
function A() console.log('вызвана функция A'); return false; > function B() console.log('вызвана функция B'); return true; > console.log( B() || A() ); // В результате вызова функции B, в консоли будет выведено "вызвана функция B", // а далее в консоли появится false (это результат оператора)
Приоритет операторов
Следующие выражения могут показаться эквивалентными, но это не так, потому что оператор && выполняется до оператора || (см. приоритет операторов).
true || false && false // вернёт true, поскольку сначала вычисляется && (true || false) && false // вернёт false, поскольку у группировки выше приоритет
Примеры
Использование оператора ИЛИ
В следующем коде показаны примеры использования оператора || (логическое ИЛИ).
= 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" o8 = '' || false // f || f вернёт false o9 = false || '' // f || f вернёт "" o10 = false || varObject // f || object вернёт varObject
Примечание: Если вы используете этот оператор, чтобы задать значение по умолчанию для некоторой переменной, имейте в виду, что любое ложноподобное будет проигнорировано. Если вам нужно исключить только null или undefined , попробуйте воспользоваться оператором нулевого слияния.
Правила конвертации для булевых значений
Конвертация И в ИЛИ
Следующая операция с булевыми значениями:
Логические операторы в JavaScript
В языке программирования JavaScript есть пять логических операторов || (или), && (и), ! (не), менее известный ?? оператор нулевого слияния, который еще относят к частному случаю оператора || (или) и тернарный оператор. Логические операторы используются для комбинирования булевых значений — true (истина) и false (ложь) и часто применяются в сочетании с операторами отношений (>, >=, true либо false .
Если значение равно 0, -0, null, false, NaN, undefined или «» (пустая строка) — результат false . Все остальное, включая строку «false» — результат true .
Остановимся подробнее на операторах || (или), && (и) и ! (не)
Логическое И &&
&& (двой знак амперсанда) — это бинарный оператор, который представляет собой логически «и» и принимает значение true только в том случае, когда оба операнда истинны, в противном случае false .
Рассмотри результат при каждой возможной логической комбинации.
console.log( true && true ); // true console.log( false && true ); // false console.log( true && false ); // false console.log( false && false ); // false
Пример №1
let examScores1 = parseInt(prompt("Введите баллы за первый экзамен")); let examScores2 = parseInt(prompt("Введите баллы за второй экзамен")); if (examScores1 >= 60 && examScores2 >= 60) < alert('Вы допущены к следующему экзамену'); >else
Пример №2
let examScores1 = parseInt(prompt("Введите баллы за первый экзамен")); let examScores2 = parseInt(prompt("Введите баллы за второй экзамен")); let examScores3 = parseInt(prompt("Введите баллы за третий экзамен")); if (examScores1 >= 60 && examScores2 >= 60 && examScores3 >= 60) alert('Вы поступили в университет'); else alert('Вы не поступили в университет');
При необходимости можно передать и больше условий && (и)
Пример №3
В качестве операнда && допускаются любые другие значения
Пример №4
console.log("текст" && undefined && 40); // значение = undefined console.log("текст" && 30 && 0 && 40); // значение = 0 console.log(40 && 30 && 3 && "текст"); // значение = текст
В случае, когда операторов && несколько:
- вычисление идет слева направо;
- операнды принимают значение true или false ;
- если операнд false сравнение останавливается, а результат — значение этого операнда;
- если все значения true , тогда возвращается последний операнд;
- если возвращаемый операнд не является булевым — результат значение операнда.
Если сказать по другому результат — это значение первого false или последнего операнда.
Пример №5
Приоритет у && (и) выше чем у || (или), таким образом сначала выполнить сравнение в левой и правой части выражения.
Логическое ИЛИ ||
|| (двойная вертикальная черта) — это бинарный оператор, который представляет собой логическое «или» и принимает значение true в том случае, когда все или одно из значений операндов истинно, в противном случае false .
Рассмотри результат при каждой возможной логической комбинации.
console.log( true || true ); // true console.log( false || true ); // true console.log( true || false ); // true console.log( false || false ); // false
Пример №6
let examScores = parseInt(prompt("Сколько баллов вы получили за 3 экзамена")); let runningSpeed = parseInt(prompt("Как быстро вы пробегаете 100 метров")); if (examScores >= 250 || runningSpeed < 12) < alert('Вы поступили в университет'); >else
Пример №7
let examScores = parseInt(prompt("Сколько баллов вы получили за 3 экзамена")); let runningSpeed = parseInt(prompt("Как быстро вы пробегаете 100 метров")); let placeOlympiad = parseInt(prompt("Какое место вы заняли на всероссийской олимпиаде")); if (examScores >= 250 || runningSpeed < 11 || placeOlympiad == 1) < alert('Вы поступили в университет'); >else
При необходимости можно передать и больше условий || (или).
Пример №8
if (1 || 0) < // 1 - true, 0 - false console.log("Результат - true") >else console.log( "Результат - false" );
В качестве операнда || допускаются любые другие значения.
Пример №9
console.log(undefined || "текст" || 40); // значение = текст console.log("" || null || 0 || "текст"); // значение = текст console.log(40 || 30 || 3 || "текст"); // значение = 40
В случае, когда операторов || несколько:
- вычисление идет слева направо;
- операнды принимают значение true или false ;
- если операнд true сравнение останавливается, а результат — значение этого операнда;
- если все значения false , тогда возвращается последний операнд;
- если возвращаемый операнд не является булевым — результат значение операнда.
Если сказать по другому результат — это значение первого true или последнего операнда.
Пример №10
let scores = parseInt(prompt("Сколько баллов вы набрали на экзамене")); scores < 90 || alert('Ваша оценка 5');
В результате «сокращенного вычисления» (когда вычисления заканчиваются, если результат уже известен) с помощью || (или), можно реализовывать и такие конструкции. В данном примере это своеобразная замена if , которая может быть удобна в определенных случаях.
Логическое НЕ !
! (восклицательный знак) - это унарный оператор, который располагается перед операндом и приводит аргумент к логическому true или false , а затем возвращает противоположное значение.
console.log( !true ); // false console.log( !false ); // true console.log( !'текст' ); // false console.log( !5 ); // false console.log( !0 ); // true
В свою очередь двойное отрицание !! используется для приведения значения к логическому типу.
console.log( !!true ); // true console.log( !!false ); // false console.log( !!'текст' ); // true console.log( !!5 ); // true console.log( !!0 ); // false
Эквивалентом такой конструкции служит встроенная функция Boolean
console.log( Boolean('текст') ); // true console.log( Boolean(5) ); // true console.log( Boolean(0) ); // true
Логически оператор ! имеет более высокий приоритет, нежели || и && , поэтому при необходимости сделать отрицание выражения, конструкцию нужно брать в скобки.
console.log( !(true && false) ); // true console.log( !true && false ); // false console.log( !(true || true) ); // false console.log( !true || true ); // true
Итого
В данном уроке мы подробно рассмотрели логические операторы:
- && (и) - возвращает true , когда оба операнда true , в противном случае false ;
- || (или) - возвращает false , если два операнда false , во всех остальных случаях true ;
- ! (не) - возвращает true , если значение операнда false и наоборот;
Из этих трех операторов наивысший приоритет исполнения имеет ! (не), затем && (и) и только потом || (или).
Skypro - научим с нуля
Логические операторы
Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Более новая информация по этой теме находится на странице https://learn.javascript.ru/logical-operators.
Для операций над логическими значениями в JavaScript есть || (ИЛИ), && (И) и ! (НЕ).
Хоть они и называются «логическими», но в JavaScript могут применяться к значениям любого типа и возвращают также значения любого типа.
|| (ИЛИ)
Оператор ИЛИ выглядит как двойной символ вертикальной черты:
Логическое ИЛИ в классическом программировании работает следующим образом: "если хотя бы один из аргументов 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 , чтобы проверить, выполняется ли хотя бы одно из условий, например:
Можно передать и больше условий:
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