Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

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

Лекция



Привет, сегодня поговорим про логические операторы, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое логические операторы , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend).


  1. || (ИЛИ)
  2. Короткий цикл вычислений
  3. Значение ИЛИ
  4. && (И)
  5. ! (НЕ)

В 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

 

 

Важность: 3

Что выведет код ниже?

 

alert( alert(1) || 2 || alert(3) );

 

Решение

Ответ: сначала 1, затем 2.

 

   
1 alert( alert(1) || 2 || alert(3) );

 

Вызов alert не возвращает значения, или, иначе говоря, возвращает undefined.

  1. Первый оператор ИЛИ || выполнит первый alert(1), получит undefined и пойдет дальше, ко второму операнду.
  2. Так как второй операнд 2 является истинным, то вычисления завершатся, результатом undefined || 2 будет 2, которое будет выведено внешнимalert( .... ).

Второй оператор || не будет выполнен, выполнение до alert(3) не дойдет, поэтому3 выведено не будет.

[Открыть задачу в новом окне]

 

&& (И)

Оператор И пишется как два амперсанда &&:

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

 

 

Важность: 3

Что выведет код ниже?

 

alert( alert(1) && alert(2) );

 

Решение

Ответ: 1undefined.

 

   
1 alert( alert(1) && alert(2) );

 

Вызов alert не возвращает значения, или, иначе говоря, возвращает undefined.

Поэтому до правого alert дело не дойдет, вычисления закончатся на левом.

[Открыть задачу в новом окне]

 

Приоритет оператора И && больше, чем ИЛИ ||, т.е. он выполняется раньше.

Поэтому в следующем коде сначала будет вычислено правое И: 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;

 

Действия !:

  1. Сначала приводит аргумент к логическому типу true/false.
  2. Затем возвращает противоположное значение.

Например:

 

   
1 alert( !true // false
2 alert( !0 )  // true

 

В частности, двойное НЕ используются для преобразования значений к логическому типу:

 

   
1 alert( !!"строка" )  // true
2 alert( !!null // false

 

 

Важность: 3

Напишите условие if для проверки того факта, что переменная ageнаходится между 14 и 90 включительно.

«Включительно» означает, что концы промежутка включены, то есть age может быть равна 14 или 90.

Решение

 

if (age >= 14 && age <= 90)

 

[Открыть задачу в новом окне]

Важность: 3

Напишите условие if для проверки того факта, что age НЕ находится между 14 и 90 включительно.

Сделайте два варианта условия: первый с использованием оператора НЕ !, второй - без этого оператора.

Решение

Первый вариант:

if ( !(age >= 14 && age <= 90) )

 

Второй вариант:

if (age < 14 || age > 90)

 

[Открыть задачу в новом окне]

Важность: 5

Какие из этих if верны, т.е. выполнятся? Какие значения будут результатами выражений в условиях if?

 

if (-1 || 0) alert('первое');
if (-1 && 0) alert('второе');
if (null || -1 && 1) alert('третье');

 

Пример решения:

// 1. Да, выполнится
// 2. Выражение внутри false || 1 будет равно 1
if (false || 1) alert('тест');

 

Решение

Ответ: первое и третье выполнятся. Детали:

 

   
01 // Да, выполнится, т.к. -1 в логическом контексте true
02 // -1 || 0 = -1
03 if (-1 || 0) alert('первое');
04  
05 // Не выполнится, т.к. -1 интерпретируется как true, а 0 как false
06 // -1 && 0 = 0
07 if (-1 && 0) alert('второе');
08  
09 // Да, выполнится
10 // оператор && имеет больший приоритет, чем ||
11 // так что -1 && 1 выполнится раньше, будет null || 1 = 1
12 // получится null || -1 && 1 -> null || 1 -> 1
13 if (null || -1 && 1) alert('третье');

К сожалению, в одной статье не просто дать все знания про логические операторы. Но я - старался. Если ты проявишь интерес к раскрытию подробностей,я обязательно напишу продолжение! Надеюсь, что теперь ты понял что такое логические операторы и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)

создано: 2014-10-07
обновлено: 2024-11-14
343



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)

Термины: Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)