Логические операторы
Здесь мы рассмотрим первые пять, операторы ?? и ??= будут в следующей статье.
Несмотря на своё название, данные операторы могут применяться к значениям любых типов. Полученные результаты также могут иметь различный тип.
Давайте рассмотрим их подробнее.
|| (ИЛИ)
Оператор «ИЛИ» выглядит как двойной символ вертикальной черты:
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 || "Аноним"); // Суперкодер
Логические операторы в 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) < // выполнить действие >

Для чего и кому нужны Big Data

7 нояб. 2023 г.
Big Data: основные понятия

31 окт. 2023 г.
20. Что такое выражения и операторы в JavaScript
Что такое выражение? Выражение – это фраза языка программирования JavaScript, которая может быть вычислена интерпретатором для получения значения. Чтобы создавать более сложные выражения, используются операторы. Операторы объединяют значения своих операндов некоторым способом и вычисляют новое значение. Самый простой пример – оператор – или +. Выражение a + b вычисляет сумму выражений a и b .
Литералы (инициализаторы)
В этом уроке много новой, поверхностной информации. К это теме я еще вернусь не один раз. Простейшие выражения называют первичными выражениями. Они являются самостоятельными выражениями и они не включают более простых выражений. Первичными выражениями в JavaScript являются константы, или литералы, ключевые слова и ссылки на переменные. Далее примеры литералов и констант:
'строка'
3.14
Литералы (инициализаторы) массива — это список каких-либо выражений, разделенных запятой и заключенный в квадратные скобки. Что такое массивы вы узнаете позже. Далее пример инициализации массива:
arr = []; /* -> пустой массив */
arr = ["Иван", "Иванов", "Иванович"]; /* -> три элемента */
Сами значения массива, могут быть массивами, это так называемое вложение. Далее пример вложенных массивов.
arr = [
["Иван", "Иванов", "Иванович"],
["Петр", "Петров", "Петрович"]
];
В литерал массива можно включить неопределенные элементы, для этого их можно просто не писать, а ставить запятые, как в примере ниже:
arr = [0. 3];
После последнего выражения в литералах массива можно указать завершающую запятую, при этом последний элемент (после последней запятой) создаваться не будет.
Литералы (инициализаторы) объектов похожи на литералы массивов, но вместо квадратных скобок, пишутся фигурные скобки, а каждое выражение имеет свое имя, далее пример:
var object = id: 1,
title: "First Pages",
>;
document.write(object.id);
Выражения обращения к свойствам
В языке JavaScript есть два способа обращения к свойствам:
var object = ;
document.write(object.id); /* Первый способ */
document.write(object["id"]); /* Второй способ */
Разберемся с первым способом. Его особенность в том, что обращение к свойствам заключается в использовании конструкции: выражение (точка) идентификатор. Выражение — это наш объект, а идентификатор — свойство этого объекта. А второй способ заключается в использовании квадратных скобок, в которых пишется свойство и обязательно в кавычках одинарных или двойных. Далее посмотрим на несколько примеров:
var object = id: main_id: 1,
second_id: 0.1
>
>;
document.write(object.id.second_id); /* -> 0.1 */
document.write(object.second_id); /* -> undefined */
Выражения и операторы
Эта глава описывает все операторы, выражения и ключевые слова языка JavaScript.
Выражения и операторы по категориям
Алфавитный список смотрите в боковой панели слева.
Первичные выражения
Базовые ключевые слова и общие выражения в JavaScript.
Ключевое слово this ссылается на контекст выполняемой функции.
Ключевое слово function определяет выражение функции.
Ключевое слово class определяет выражение класса.
Ключевое слово function* (со звёздочкой) определяет функцию-генератор.
Пауза или продолжение выполнения функции-генератора.
Делегирует выполнение другому генератору итерируемому объекту.
async function определяет выражение асинхронной функции.
Пауза и продолжение выполнения асинхронной функции и ожидание Promise (результата выполнения) с результатом разрешено/отклонено.
Синтаксис создания инициализатора/литерала массива.
Синтаксис создания инициализатора/литерала объекта
Синтаксис создания литерала регулярного выражения.
Левосторонние выражения
Значения слева являются назначением присваивания.
Операторы доступа к членам предоставляют доступ к свойству или методу объекта ( object.property и object[‘property’] ).
Оператор new создаёт экземпляр объекта с использованием конструктора.
Свойство new.target ссылается на конструктор или функцию, который был вызван через оператор new .
Ключевое слово super вызывает конструктор родительского класса.
Оператор распространения позволяет развернуть выражение в местах, где ожидается несколько аргументов (при вызове функций) или несколько элементов (при создании литералов массива).
Инкремент и декремент
Операторы постфиксного/префиксного инкремента и декремента.
Оператор постфиксного инкремента.
Оператор постфиксного декремента.
Оператор префиксного инкремента. (Значение переменной, сначала, увеличивается на 1, а затем используется в выражении)
Оператор префиксного декремента.
Унарные операторы
Унарные операции — это операции с одним операндом.
Оператор delete удаляет свойство из объекта.
Оператор void отбрасывает возвращаемое значение выражения.
Оператор typeof определяет тип переданного объекта.
Оператор унарного плюса преобразует свой операнд в тип Number .
Оператор унарного минуса преобразует свой операнд в тип Number , а затем меняет его знак.
Оператор побитового НЕ.
Оператор логического НЕ.
Арифметические операторы
Арифметические операторы своими операндами принимают числовые значения (литералы или переменные) и возвращают одно числовое значение.
Оператор взятия остатка от деления.
Оператор возведения в степень.
Реляционные операторы
Реляционные операторы (операторы отношения) сравнивают свои операнды и возвращают значение типа Boolean , зависящее от того, был ли результат сравнения истинным или ложным.
Оператор in определяет, содержит ли объект указанное свойство.
Оператор instanceof определяет, является ли объект экземпляром потомком Prototype (или экземпляром) другого объекта.
Оператор меньше или равно.
Оператор больше или равно.
Примечание: => это не оператор. Это нотация для Стрелочных функций.
Операторы равенства
Результат вычисления оператора равенства всегда имеет тип Boolean и значение, зависящее от того, был ли результат проверки истинным или ложным.
Оператор проверки на равенство.
Оператор проверки на неравенство.
Оператор проверки на идентичность.
Оператор проверки на неидентичность.
Операторы побитового сдвига
Операции для сдвига всех битов операнда.
Оператор побитового сдвига влево.
Оператор знакового побитового сдвига вправо.
Оператор беззнакового побитового сдвига вправо.
Бинарные побитовые операторы
Побитовые операторы трактуют свои операнды как набор из 32 битов (нулей и единиц) и возвращают стандартные числовые значения JavaScript.
Оператор побитового И.
Оператор побитового ИЛИ.
Оператор побитового ИСКЛЮЧАЮЩЕГО ИЛИ.
Бинарные логические операторы
Логические операторы обычно используются вместе с булевыми (логическими) значениями и в сочетании с ними они возвращают булево значение.
Оператор логического И.
Оператор логического ИЛИ.
Условный (тернарный) оператор
Условный оператор возвращает одно значение из двух данных в зависимости от логического значения условия.
Операторы присваивания
Операторы присваивания присваивают значение своему левому операнду, зависящее от значения их правого операнда.
Оператор присваивания с умножением.
Оператор присваивания с делением.
Оператор присваивания с взятием остатка от деления.
Оператор присваивания со сложением.
Оператор присваивания с вычитанием.
Оператор присваивания со сдвигом влево.
Оператор присваивания со знаковым сдвигом вправо.
Оператор присваивания с беззнаковым сдвигом вправо.
Оператор присваивания с побитовым И.
Оператор присваивания с побитовым ИСКЛЮЧАЮЩИМ ИЛИ.
Оператор присваивания с побитовым ИЛИ.
Деструктурирующее присваивание позволяет вам присваивать свойства массива или объекта переменным с использованием синтаксиса, очень похожего на объявление литералов массива или объекта.
Оператор запятая
Оператор запятая позволяет вычислять несколько выражений в одном операторе и возвращает результат вычисления последнего выражения.
Нестандартные особенности
Ключевое слово function может быть использовано для определения устаревших функций-генераторов в одном выражении. Для того, чтобы сделать такую функцию, её тело должно содержать хотя бы одно выражение yield .
Синтаксис закрытого выражения для сокращённого написания простейших функций.
Упрощённый синтаксис создания массива.
Упрощённый синтаксис создания генератора.
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-addition-operator-plus |
| ECMAScript Language Specification # sec-assignment-operators |
| ECMAScript Language Specification # sec-async-function-definitions |
| ECMAScript Language Specification # sec-async-generator-function-definitions |
| ECMAScript Language Specification # prod-BitwiseANDExpression |
| ECMAScript Language Specification # sec-bitwise-not-operator |
| ECMAScript Language Specification # prod-BitwiseORExpression |
| ECMAScript Language Specification # prod-BitwiseXORExpression |
| ECMAScript Language Specification # sec-class-definitions |
| ECMAScript Language Specification # sec-comma-operator |
| ECMAScript Language Specification # sec-conditional-operator |
| ECMAScript Language Specification # sec-postfix-decrement-operator |
| ECMAScript Language Specification # sec-delete-operator |
| ECMAScript Language Specification # sec-destructuring-assignment |
| ECMAScript Language Specification # sec-destructuring-binding-patterns |
| ECMAScript Language Specification # sec-multiplicative-operators |
| ECMAScript Language Specification # sec-equality-operators |
| ECMAScript Language Specification # sec-exp-operator |
| ECMAScript Language Specification # sec-function-definitions |
| ECMAScript Language Specification # sec-generator-function-definitions |
| ECMAScript Language Specification # sec-relational-operators |
| ECMAScript Language Specification # sec-grouping-operator |
| ECMAScript Language Specification # sec-import-calls |
| ECMAScript Language Specification # prod-ImportMeta |
| HTML Standard # hostgetimportmetaproperties |
| ECMAScript Language Specification # sec-postfix-increment-operator |
| ECMAScript Language Specification # sec-left-shift-operator |
| ECMAScript Language Specification # prod-LogicalANDExpression |
| ECMAScript Language Specification # sec-logical-not-operator |
| ECMAScript Language Specification # prod-LogicalORExpression |
| ECMAScript Language Specification # sec-new-operator |
| ECMAScript Language Specification # sec-built-in-function-objects |
| ECMAScript Language Specification # sec-null-value |
| ECMAScript Language Specification # prod-CoalesceExpression |
| ECMAScript Language Specification # sec-object-initializer |
| ECMAScript Language Specification # prod-OptionalExpression |
| ECMAScript Language Specification # sec-property-accessors |
| ECMAScript Language Specification # sec-signed-right-shift-operator |
| ECMAScript Language Specification # prod-SpreadElement |
| ECMAScript Language Specification # prod-ArgumentList |
| ECMAScript Language Specification # prod-PropertyDefinition |
| ECMAScript Language Specification # sec-subtraction-operator-minus |
| ECMAScript Language Specification # sec-super-keyword |
| ECMAScript Language Specification # sec-this-keyword |
| ECMAScript Language Specification # sec-typeof-operator |
| ECMAScript Language Specification # sec-unary-minus-operator |
| ECMAScript Language Specification # sec-unary-plus-operator |
| ECMAScript Language Specification # sec-unsigned-right-shift-operator |
| ECMAScript Language Specification # sec-void-operator |
| ECMAScript Language Specification # prod-YieldExpression |
| ECMAScript Language Specification # sec-generator-function-definitions-runtime-semantics-evaluation |
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 18 окт. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.