Для чего нужен логический оператор not javascript
Перейти к содержимому

Для чего нужен логический оператор not javascript

  • автор:

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

Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Более новая информация по этой теме находится на странице https://learn.javascript.ru/logical-operators.

Для операций над логическими значениями в JavaScript есть || (ИЛИ), && (И) и ! (НЕ).

Хоть они и называются «логическими», но в JavaScript могут применяться к значениям любого типа и возвращают также значения любого типа.

|| (ИЛИ)

Оператор ИЛИ выглядит как двойной символ вертикальной черты:

result = a || b;

Логическое ИЛИ в классическом программировании работает следующим образом: «если хотя бы один из аргументов 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 (1 || 0) < // сработает как if( true || false ) alert( 'верно' ); >

Обычно оператор ИЛИ используется в if , чтобы проверить, выполняется ли хотя бы одно из условий, например:

var hour = 9; if (hour < 10 || hour >18)

Можно передать и больше условий:

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

Логическое НЕ (!)

Логический оператор НЕ ( ! ) (логическое отрицание) меняет логическое значение операнда с истины в ложь и наоборот. Обычно он используется с булевыми (логическими) значениями. При использовании с любыми другими значениями, если операнд может быть преобразован в true , то вернёт false ; в противном случае он возвращается true .

Интерактивный пример

Синтаксис

!expr; 

Описание

Возвращает false , если операнд может быть преобразован в true ; в противном случае возвращается true .

Если значение может быть преобразовано в true , то оно рассматривается как истинноподобное (truthy). Если же значение может быть преобразовано в false , то оно называется ложноподобным (falsy).

Примеры выражений, которые могут быть преобразованы в false :

  • null ;
  • NaN ;
  • 0 ;
  • пустая строка ( «» , » , « );
  • undefined .

Несмотря на то, что оператор ! может использоваться с операндами, значения которых не относится к типу Boolean, это всё равно булевый оператор, поскольку его возвращаемое значение всегда можно преобразовать в булевый примитив. Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной оператор НЕ (en-US) или конструктор Boolean (en-US).

Примеры

Использование логического НЕ

В следующем коде показаны примеры использования оператора ! (логическое НЕ).

= !true; // !t вернёт false n2 = !false; // !f вернёт true n3 = !""; // !f вернёт true n4 = !"Cat"; // !t вернёт false 

Двойное НЕ ( !! )

Можно один за другим использовать пару операторов НЕ, чтобы явным образом принудительно преобразовать любое значение в соответствующий булевый примитив. Преобразование основано на «истинноподобности» или «ложноподобности» значения (см. truthy и falsy)).

Точно такое же преобразование может быть выполнено с помощью функции Boolean (en-US).

= !!true; // !!truthy вернёт true n2 = !!>; // !!truthy вернёт true: любой объект - истинноподобный. n3 = !!new Boolean(false); // . даже Boolean-объект со значением false из вызова .valueOf()! n4 = !!false; // !!falsy вернёт false n5 = !!""; // !!falsy вернёт false n6 = !!Boolean(false); // !!falsy вернёт false 

Конвертация операторов НЕ

Следующая операция с булевыми значениями:

!!bCondition; 

1. Двоичная логика

Любая программа может быть создана на основе нескольких принципов: последовательности выполнения и ветвлений.

Последовательность выполнения — следование записи кода сверху вниз. Но не всегда программа должна выполняться строго последовательно. Для изменения последовательности используются циклы и ветвления.

Ветвление — возможность выполнить ту или иную последовательность кода в зависимости от условия. Условие может быть любым, но результат его проверки всегда будет одним из двух значений true или false .

Компьютер использует бинарный (от латинского bis — дважды) код. Т.е. всего два значения используются для создания любых программ: 0 и 1 . Это значит, что условия также задаются в виде 0 (нет, false) и 1 (да, true).

В математике существует раздел булевой логики, в котором условия бинарны, т.е. могут быть представлены в виде 0 и 1 , а также в виде слов true и false . Именно эта логика используется для реализации ветвления.

1.1. Приведение типов

Для того чтобы работала булевая логика необходимо на входе иметь два значения. Поэтому в JavaScript, в логических операциях, осуществляется приведение типов операндов к true или false . Приведение происходит если в коде обнаружен логический оператор.

Truthy и Falsy — термины, которые используются для тех значений, которые, в логической операции, приводятся к true или false , хотя изначально не были булями.

Запомните 6 ложных (falsy) значений, приводящихся к false в логическом преобразовании: 0 , NaN , null , undefined , пустая строка: «» или » , false . Абсолютно все остальное приводится к true .

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

Есть три логических оператора, которые используются для проверки выполнения множественных выражений.

logical operators

2.1. Логическое «И»

Оператор && приводит все операнды к булю и возвращает одно из значений (операндов). Левый операнд если его можно привести к false , и правый в остальных случаях.

const num = 20; const result = num > 10 && num  30; console.log(result); // true 

В коде выше мы проверяем условие: переменная num больше 10 и меньше 30 . Так как оба условия вернут true , то и результатом всего выражения будет true .

Для того чтобы оператор && вернул true , требуется чтобы все операнды были истинными (truthy). Если хотябы один из операндов будет приведен к false , то результатом выражения будет этот операнд.

const num = 40; const result = num > 10 && num  30; console.log(result); // false 

2.2. Логическое «ИЛИ»

Оператор || возвращает одно из значений (операндов). Левый операнд если его можно привести к true , и правый в остальных случаях.

const num = 5; const result = num  10 || num > 30; console.log(result); // true 

Это тоже будет true так как хотябы один из операндов был приведен к true .

const num = 40; const result = num  10 || num > 30; console.log(result); // true 

А тут ни одно из условий не выполняется, поэтому получаем false .

const num = 20; const result = num  10 || num > 30; console.log(result); // false 

2.3. Логическое «НЕ»

Оператор ! приводит операнд к булю, если необходимо, а затем заменяет его на противоположный.

console.log(!true); // false console.log(!false); // true console.log(!1); // false console.log(!0); // true 

2.4. Порядок вычисления

При выполнении логических операций, правый операнд может не вычисляться.

and or image

«Купить билет И отдохнуть» — если левый операнд «Купить билет» окажется false , то вычислять второй нет смысла.

false && (этот операнд не вычисляется) 

«Отдохнуть ИЛИ сохранить деньги» — если левый операнд «Отдохнуть» окажется true , то вычислять второй нет смысла.

true || (этот операнд не вычисляется) 

3. Дополнительные материалы

  • Mastering JavaScript’s && and || logical operators
  • MDN: Логические операторы
  • Logic Gates Explained (видео)

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

Здесь мы рассмотрим первые пять, операторы ?? и ??= будут в следующей статье.

Несмотря на своё название, данные операторы могут применяться к значениям любых типов. Полученные результаты также могут иметь различный тип.

Давайте рассмотрим их подробнее.

|| (ИЛИ)

Оператор «ИЛИ» выглядит как двойной символ вертикальной черты:

result = a || b;

Традиционно в программировании ИЛИ предназначено только для манипулирования булевыми значениями: в случае, если какой-либо из аргументов true , он вернёт true , в противоположной ситуации возвращается false .

В JavaScript, как мы увидим далее, этот оператор работает несколько иным образом. Но давайте сперва посмотрим, что происходит с булевыми значениями.

Существует всего четыре возможные логические комбинации:

alert( true || true ); // true alert( false || true ); // true alert( true || false ); // true alert( false || false ); // false

Как мы можем наблюдать, результат операций всегда равен true , за исключением случая, когда оба аргумента false .

Если значение не логического типа, то оно к нему приводится в целях вычислений.

Например, число 1 будет воспринято как true , а 0 – как false :

if (1 || 0) < // работает как if( true || false ) alert( 'истинно!' ); >

Обычно оператор || используется в if для проверки истинности любого из заданных условий.

let hour = 9; if (hour < 10 || hour >18)

Можно передать и больше условий:

let hour = 12; let isWeekend = true; if (hour < 10 || hour >18 || isWeekend) < alert( 'Офис закрыт.' ); // это выходной >

ИЛИ «||» находит первое истинное значение

Описанная выше логика соответствует традиционной. Теперь давайте поработаем с «дополнительными» возможностями JavaScript.

Расширенный алгоритм работает следующим образом.

При выполнении ИЛИ || с несколькими значениями:

result = value1 || value2 || value3;

Оператор || выполняет следующие действия:

  • Вычисляет операнды слева направо.
  • Каждый операнд конвертирует в логическое значение. Если результат true , останавливается и возвращает исходное значение этого операнда.
  • Если все операнды являются ложными ( false ), возвращает последний из них.

Значение возвращается в исходном виде, без преобразования.

Другими словами, цепочка ИЛИ || возвращает первое истинное значение или последнее, если такое значение не найдено.

alert( 1 || 0 ); // 1 (1 - истинное значение) alert( true || 'какая-то строка' ); // true alert( null || 1 ); // 1 (первое истинное значение) alert( null || 0 || 1 ); // 1 (первое истинное значение) alert( undefined || null || 0 ); // 0 (поскольку все ложно, возвращается последнее значение)

Это делает возможным более интересное применение оператора по сравнению с «чистым, традиционным, только булевым ИЛИ».

    Получение первого истинного значения из списка переменных или выражений. Например, у нас есть переменные firstName , lastName и nickName , все они необязательные (т.е. они могут быть неопределенными или иметь ложные значения). Давайте воспользуемся оператором ИЛИ || , чтобы выбрать ту переменную, в которой есть данные, и показать её (или «Аноним», если ни в одной переменной данных нет):

let firstName = ""; let lastName = ""; let nickName = "Суперкодер"; alert( firstName || lastName || nickName || "Аноним"); // Суперкодер

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *