Логические операторы в JavaScript
Логические операторы выступают в роли особенных символов, предназначенных для объединения или изменения логических выражений. В языке программирования JavaScript есть четыре основных логических оператора: «и» (`&&`), «или» (`||`), «не» (`!`) и оператор нулевого слияния (`??`).
Истинные и ложные значения
Истинные значения — это значения, которые при приведении к логическому типу с помощью функции Boolean( ) выведут true, например:
const num = 7;
console.log(Boolean(num)) // выведет true
Ложные значения — это значения, которые при приведении к логическому типу выводят false. В логическом преобразовании существует шесть ложных значений: false, null, undefined, NaN, пустая строка и 0. Все остальное приводится к true.
Оператор «и» (`&&`)
JavaScript Оператор «и» возвращает последнюю истину, когда оба его операнда истинны. Если хотя бы один из операндов ложный — возвращается первая ложь. В случае если левый операнд был приведен к false, правый может не вычисляться.
let a = true;
let b = false;
let e = a && b; // e = false, так как один из операндов false
let d = a && true; // d = true, так как оба операнда true
Логическое «и» запинается на лжи и возвращает то, на чем остановилось. Если ложных значений нет — выводится последний операнд.
let a = "Апельсин";
let b = 0;
let c = 7;
let d = a && b; // d = 0
let e = a && c; // e = 7
Оператор `&&` обладает более высоким приоритетом по сравнению с оператором `||`(«или»), что гарантирует его выполнение в первую очередь. Рассмотрим пример:
let a = "Апельсин";
let b = 0;
let c = 7;
let f = a || b && c; // f = "Апельсин", сначала выполняется И, а потом ИЛИ
let g = (a || b) && c; // g = 7, сначала выполняется то, что в скобках
Оператор «и» используется для проверки нескольких условий одновременно. Например, мы хотим выполнить какое-то действие только тогда, когда пользователь авторизован и находится онлайн:
if (user.isAuthorized && user.isOnline) {
// выполнить действие
}
Оператор «или» (`||`)
Оператор JS «или» гарантирует возврат истины в случае, когда один из операндов является истинным. Если оба операнда истинны, то возвращается первая истина. Когда оба операнда ложны, «или» возвращает последнюю ложь:
let a = true;
let b = false;
let c = a || b; // c = true, так как один из операндов true
let d = false || false; // d = false, так как оба операнда false
Оператор «или» может использоваться для задания альтернативного значения по умолчанию. К примеру, мы хотим присвоить переменной `name`значение параметра `nickname`, если он существует. Если его нет, то выводить строку "Тайный гость" в качестве значения по умолчанию:
let name = nickname || "Тайный гость";
Оператор «не» (`!`)
Оператор «не» обладает способностью инвертировать значение своего операнда, возвращая true при ложном операнде и false при истинном. Среди всех логических операторов, «не» обладает наивысшим приоритетом.
let a = true;
let b = !a; // b = false, так как оператор `!` меняет значение на противоположное
let c = !false; // c = true, так как оператор `!` меняет значение на противоположное
let d = !(a && b); // d = true, так как сначала выполняется И, а потом `!`
let f = !a && b; // d = false
Оператор «не» часто используется в if-else инструкциях. Представим, что нам надо выполнить действие тогда, когда переменная `isonline`имеет значение false. Но код в фигурных скобках в if-конструкции будет выполняться, только если в круглых скобках будет true значение. В этом случае оператор `!` приходит на помощь, создавая выражение в скобках с значением, противоположным значению переменной.
if (!isonline) {
// выполнение действия
}else {
// действие не выполнять
}
Оператор нулевого слияния (`??`)
Оператор нулевого слияния возвращает значение левого операнда, если он не `null` и не `undefined`, иначе возвращает значение правого операнда. Оператор нулевого слияния имеет меньший приоритет, чем операторы «и» и «или», то есть он выполняется после них.
let a = null;
let b = 42;
let c = a ?? b; // c = 42, так как a равно null
let d = 0 ?? b; // d = 0, так как 0 не равно null или undefined
Использование операторов `&&` и `||` вместе с оператором `??` в одном выражении приведет к ошибке SyntaxError. Чтобы этого не происходило, достаточно добавить приоритет с помощью круглых скобок:
let e = a && b ?? (a || b);
//Uncaught SyntaxError: Unexpected token '??'
let e = (a && b) ?? (a || b);
// e = 42, сначала выполняется ИЛИ, а потом нулевое слияние
Оператор нулевого слияния применяется, чтобы задать значение по умолчанию для переменных или параметров, которые могут быть равны `null` или `undefined`. Представим, что мы хотим присвоить переменной `name` значение параметра `nickname`, если он не равен `null` или `undefined`. Если значение параметра `nickname` будет`null` или `undefined` — передим для `name` в качестве значения строку "Тайный гость":
let name = nickname ?? "Тайный гость";