Лекция
Привет, сегодня поговорим про логические операторы, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое логические операторы , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне клиента 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)
Комментарии