--- title: Логическое ИЛИ (||) slug: Web/JavaScript/Reference/Operators/Logical_OR tags: - JavaScript - Language feature - Logical Operator - Operator - Reference browser-compat: javascript.operators.logical_or --- {{jsSidebar("Operators")}} Логический оператор ИЛИ (`||`) (дизъюнкция) для набора операндов истинен будет `true` только в случае, если один или несколько его операндов имеют значение `true`. Обычно используется с {{jsxref("Boolean", "булевыми")}} (логическими) значениями. Тогда возвращается булевое значение. Однако фактически оператор `||` возвращает значение одного из операндов, поэтому если этот оператор используется с небулевыми значениями, он вернет небулевое значение. {{EmbedInteractiveExample("pages/js/expressions-logical-or.html", "shorter")}} ## Синтаксис ```js expr1 || expr2 ``` ## Описание Если `expr1` может быть преобразовано в `true`, то вернётся `expr1`; в противном случае возвращается `expr2`. Если значение может быть преобразовано в `true`, то оно рассматривается как {{Glossary("truthy", "истиноподобное (truthy)")}}. Если же значение может быть преобразовано в `false`, то оно называется {{Glossary("falsy", "ложноподобным (falsy)")}}. Примеры выражений, которые могут быть преобразованы в `false`: - `null`; - `NaN`; - `0`; - пустая строка (`""`, `''`, ` `` `); - `undefined`. Несмотря на то, что оператор `||` может использоваться с операндами без логических значений, это всё равно булевый оператор, поскольку его возвращаемое значение всегда можно преобразовать в [булевый примитив](/ru/docs/Web/JavaScript/Data_structures#Boolean_type). Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной {{JSxRef("Operators/Logical_NOT", "оператор НЕ")}} или конструктор {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}}. ### Сокращённое вычисление Оператор логического ИЛИ вычисляется слева направо, делая возможным сокращённое вычисление выражения, согласно следующему правилу: `(истинноподобное выражение) || следующее выражение` — вычисление останавливается на истинноподобном выражении; Сокращенное вычисление хорошо тем, что `следующее выражение` не будет **вычислено**, т.е. всё, связанное с ним, будет проигнорировано (например, если `следующее выражение` представляет собой вызов функции, то он никогда не произойдёт). Всё потому, что значение оператора известно уже после вычисления первого операнда. Посмотрите на пример: ```js function A(){ console.log('вызвана функция A'); return false; } function B(){ console.log('вызвана функция B'); return true; } console.log( B() || A() ); // В результате вызова функции B, в консоли будет выведено "вызвана функция B", // а далее в консоли появится false (это результат оператора) ``` ### Приоритет операторов Следующие выражения могут показаться эквивалентными, но это не так, потому что оператор `&&` выполняется до оператора `||` (см. [приоритет операторов](/ru/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)). ```js true || false && false // вернёт true, поскольку сначала вычисляется && (true || false) && false // вернёт false, поскольку у группировки выше приоритет ``` ## Примеры ### Использование оператора ИЛИ В следующем коде показаны примеры использования оператора `||` (логическое ИЛИ). ```js 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" o8 = '' || false // f || f вернёт false o9 = false || '' // f || f вернёт "" o10 = false || varObject // f || object вернёт varObject ``` > **Примечание:** Если вы используете этот оператор, чтобы задать значение по умолчанию для некоторой переменной, имейте в виду, что любое _ложноподобное_ будет проигнорировано. Если вам нужно исключить только {{jsxref("null")}} или {{jsxref("undefined")}}, попробуйте воспользоваться [оператором нулевого слияния](/ru/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator). ### Правила конвертации для булевых значений #### Конвертация И в ИЛИ Следующая операция с **булевыми значениями**: ```js bCondition1 && bCondition2 ``` всегда эквивалентна: ```js !(!bCondition1 || !bCondition2) ``` #### Конвертация ИЛИ в И Следующая операция с **булевыми значениями**: ```js bCondition1 || bCondition2 ``` всегда эквивалентна: ```js !(!bCondition1 && !bCondition2) ``` ### Удаление вложенных круглых скобок Поскольку логические выражения вычисляются слева направо, всегда можно удалить круглые скобки из сложного выражения при условии соблюдения определенных правил. Следующая составная операция с **булевыми значениями**: ```js bCondition1 && (bCondition2 || bCondition3) ``` всегда эквивалентна: ```js !(!bCondition1 || !bCondition2 && !bCondition3) ``` ## Спецификации {{Specifications}} ## Поддержка браузерами {{Compat}} ## Смотрите также - [Оператор нулевого слияния (`??`)](/ru/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator) - {{jsxref("Boolean")}} - {{Glossary("Truthy")}} - {{Glossary("Falsy")}}