Лекция
Привет, сегодня поговорим про логические операторы, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое логические операторы , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend).
||
(ИЛИ)&&
(И)!
(НЕ)В JavaScript поддерживаются операторы ||
(ИЛИ), &&
(И) и !
(НЕ).
Они называются «логическими», но в JavaScript могут применяться к значениям любого типа и возвращают также значения любого типа.
||
(ИЛИ)Оператор ИЛИ выглядит как двойной символ вертикальной черты:
result = a || b; |
Логическое ИЛИ в классическом программировании работает следующим образом: «если хотя бы один из аргументов true
, то возвращает true
, иначе — false
».
Получается следующая таблица результатов:
1 |
alert( true || true ); // true |
2 |
alert( false || true ); // true |
3 |
alert( true || false ); // true |
4 |
alert( false || false ); // false |
При вычислении ИЛИ в JavaScript можно использовать любые значения. В этом случае они будут интерпретироваться как логические.
Например, число 1
будет воспринято как true
, а 0
— как false
:
1 |
if ( 1 || 0 ) { // сработает как if( true || false ) |
2 |
alert( 'верно' ); |
3 |
} |
Обычно оператор ИЛИ используется в if
, чтобы проверить, выполняется ли хотя бы одно из условий, например:
1 |
var hour = 9; |
2 |
3 |
if (hour < 10 || hour > 18) { |
4 |
alert( 'Офис до 10 или после 18 закрыт' ); |
5 |
} |
Можно передать и больше условий:
1 |
var hour = 12, isWeekend = true ; |
2 |
3 |
if (hour < 10 || hour > 18 || isWeekend) { |
4 |
alert( 'Офис до 10 или после 18 или в выходной закрыт' ); |
5 |
} |
JavaScript вычисляет несколько ИЛИ слева направо. При этом, чтобы экономить ресурсы, используется так называемый «короткий цикл вычисления».
Допустим, вычисляются несколько ИЛИ подряд: a || b || c || ...
. Если первый аргумент — true
, то результат заведомо будет true
(хотя бы одно из значений — true
), и остальные значения игнорируются.
Это особенно заметно, когда выражение, переданное в качестве второго аргумента, имеет сторонний эффект — например, присваивает переменную.
При запуске примера ниже присвоение x
не произойдет:
1 |
var x; |
2 |
3 |
true
|| (x = 1); // просто вычислим ИЛИ, без if |
4 |
5 |
alert(x); // undefined, x не присвоен |
…А в примере ниже первый аргумент — false
, так что ИЛИ попытается вычислить второй, запустив тем самым присваивание:
1 |
var x; |
2 |
3 |
false
|| (x = 1); |
4 |
alert(x); // 1 |
Итак, как мы видим, оператор ИЛИ вычисляет ровно столько значений, сколько необходимо — до первого true
.
Оператор ИЛИ возвращает то значение, на котором остановились вычисления.
Примеры:
1 |
alert( 1 || 0 ); // 1 |
2 |
alert( true || 'неважно что' ); // true |
3 |
4 |
alert( null || 1 ); // 1 |
5 |
alert( undefined || 0 ); // 0 |
Это используют, в частности, чтобы выбрать первое «истинное» значение из списка:
1 |
var undef; // переменная не присвоена, т.е. Об этом говорит сайт https://intellect.icu . равна undefined |
2 |
var zero = 0; |
3 |
var emptyStr = "" ; |
4 |
var msg = "Привет!" ; |
5 |
6 |
var result = undef || zero || emptyStr || msg || 0; |
7 |
8 |
alert(result) // выведет "Привет!" - первое значение, которое является true |
&&
(И)Оператор И пишется как два амперсанда &&
:
result = a && b; |
В классическом программировании И возвращает true
, если оба аргумента истинны, а иначе —false
1 |
alert( true && true ); // true |
2 |
alert( false && true ); // false |
3 |
alert( true && false ); // false |
4 |
alert( false && false ); // false |
Пример:
1 |
var hour = 12, minute = 30; |
2 |
3 |
if (hour == 12 && minute == 30) { |
4 |
alert( 'Время 12:30' ); |
5 |
} |
Как и в ИЛИ, допустимы любые значения:
1 |
if ( 1 && 0 ) { // вычислится как true && false |
2 |
alert( 'не сработает, т.к. условие ложно' ); |
3 |
} |
К И применим тот же принцип «короткого цикла вычислений», но немного по-другому, чем к ИЛИ.
Если левый аргумент — false
, оператор И возвращает его и заканчивает вычисления. Иначе — вычисляет и возвращает правый аргумент.
Например:
1 |
// Первый аргумент - true, |
2 |
// Поэтому возвращается второй аргумент |
3 |
alert(1 && 0); // 0 |
4 |
alert(1 && 5); // 5 |
5 |
6 |
// Первый аргумент - false, |
7 |
// Он и возвращается, а второй аргумент игнорируется |
8 |
alert( null && 5); // null |
9 |
alert(0 && "не важно" ); // 0 |
Приоритет оператора И &&
больше, чем ИЛИ ||
, т.е. он выполняется раньше.
Поэтому в следующем коде сначала будет вычислено правое И: 1 && 0 = 0
, а уже потом — ИЛИ.
1 |
alert(5 || 1 && 0); // 5 |
&&
вместо if
Оператор &&
в простых случаях можно использовать вместо if
, например:
1 |
var x = 1; |
2 |
3 |
(x > 0) && alert( 'Больше' ); |
Действие в правой части &&
выполнится только в том случае, если до него дойдут вычисления. То есть, если в левой части будет true
.
Получился аналог:
1 |
var x = 1; |
2 |
3 |
if (x > 0) { |
4 |
alert( 'Больше' ); |
5 |
} |
Однако, как правило, if
лучше читается и воспринимается. Он более очевиден, поэтому лучше использовать его. Это, впрочем, относится и к другим неочевидным применениям возможностей языка.
!
(НЕ)Оператор НЕ — самый простой. Он получает один аргумент. Синтаксис:
var result = !value; |
Действия !
:
true/false
.Например:
1 |
alert( ! true ) // false |
2 |
alert( !0 ) // true |
В частности, двойное НЕ используются для преобразования значений к логическому типу:
1 |
alert( !! "строка" ) // true |
2 |
alert( !! null ) // false |
К сожалению, в одной статье не просто дать все знания про логические операторы. Но я - старался. Если ты проявишь интерес к раскрытию подробностей,я обязательно напишу продолжение! Надеюсь, что теперь ты понял что такое логические операторы и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)
Комментарии
Оставить комментарий
Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)
Термины: Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)