Выражения и операторы
=====================

Эта глава описывает все операторы, выражения и ключевые слова языка JavaScript.

Выражения и операторы по категориям
-----------------------------------

Алфавитный список смотрите в боковой панели слева.

### Первичные выражения

Базовые ключевые слова и общие выражения в JavaScript.

`this`

Ключевое слово `this` ссылается на контекст выполняемой функции.

`function`

Ключевое слово `function` определяет выражение функции.

`class`

Ключевое слово `class` определяет выражение класса.

`function*`

Ключевое слово `function*` (со звёздочкой) определяет функцию-генератор.

`yield`

Пауза или продолжение выполнения функции-генератора.

`yield*`

Делегирует выполнение другому генератору итерируемому объекту.

Экспериментальная возможность `async function*`

`async function` определяет выражение асинхронной функции.

Экспериментальная возможность `await`

Пауза и продолжение выполнения асинхронной функции и ожидание Promise (результата выполнения) с результатом разрешено/отклонено.

`[]`

Синтаксис создания инициализатора/литерала массива.

`{}`

Синтаксис создания инициализатора/литерала объекта

`/ab+c/i`

Синтаксис создания литерала регулярного выражения.

`( )`

Оператор группировки.

### Левосторонние выражения

Значения слева являются назначением присваивания.

Доступ к свойству

 Операторы доступа к членам предоставляют доступ к свойству или методу объекта
 (`object.property` и `object['property']`).


`new`

Оператор `new` создаёт экземпляр объекта с использованием конструктора.

new.target

Свойство `new.target` ссылается на конструктор или функцию, который был вызван через оператор `new`.

`super`

Ключевое слово `super` вызывает конструктор родительского класса.

`...obj`

Оператор распространения позволяет развернуть выражение в местах, где ожидается несколько аргументов (при вызове функций) или несколько элементов (при создании литералов массива).

### Инкремент и декремент

Операторы постфиксного/префиксного инкремента и декремента.

`A++` (en-US)

Оператор постфиксного инкремента.

`A--` (en-US)

Оператор постфиксного декремента.

`++A` (en-US)

Оператор префиксного инкремента. *(Значение переменной, сначала, увеличивается на 1, а затем используется в выражении)*

`--A` (en-US)

Оператор префиксного декремента.

### Унарные операторы

Унарные операции — это операции с одним операндом.

`delete`

Оператор `delete` удаляет свойство из объекта.

`void`

Оператор `void` отбрасывает возвращаемое значение выражения.

`typeof`

Оператор `typeof` определяет тип переданного объекта.

`+` (en-US)

Оператор унарного плюса преобразует свой операнд в тип `Number`.

`-` (en-US)

Оператор унарного минуса преобразует свой операнд в тип `Number`, а затем меняет его знак.

`~` (en-US)

Оператор побитового НЕ.

`!` (en-US)

Оператор логического НЕ.

### Арифметические операторы

Арифметические операторы своими операндами принимают числовые значения (литералы или переменные) и возвращают одно числовое значение.

`+` (en-US)

Оператор сложения.

`-` (en-US)

Оператор вычитания.

`/` (en-US)

Оператор деления.

`*` (en-US)

Оператор умножения.

`%` (en-US)

Оператор взятия остатка от деления.

`**` (en-US)

Оператор возведения в степень.

### Реляционные операторы

Реляционные операторы (операторы отношения) сравнивают свои операнды и возвращают значение типа `Boolean`, зависящее от того, был ли результат сравнения истинным или ложным.

`in`

Оператор `in` определяет, содержит ли объект указанное свойство.

`instanceof`

Оператор `instanceof` определяет, является ли объект экземпляром потомком Prototype (или экземпляром) другого объекта.

`<` (en-US)

Оператор меньше.

`>` (en-US)

Оператор больше.

`<=` (en-US)

Оператор меньше или равно.

`>=` (en-US)

Оператор больше или равно.


**Примечание:** => это не оператор. Это нотация для Стрелочных функций.

### Операторы равенства

Результат вычисления оператора равенства всегда имеет тип `Boolean` и значение, зависящее от того, был ли результат проверки истинным или ложным.

`==` (en-US)

Оператор проверки на равенство.

`!=` (en-US)

Оператор проверки на неравенство.

`===` (en-US)

Оператор проверки на идентичность.

`!==` (en-US)

Оператор проверки на неидентичность.

### Операторы побитового сдвига

Операции для сдвига всех битов операнда.

`<<` (en-US)

Оператор побитового сдвига влево.

`>>` (en-US)

Оператор знакового побитового сдвига вправо.

`>>>` (en-US)

Оператор беззнакового побитового сдвига вправо.

### Бинарные побитовые операторы

Побитовые операторы трактуют свои операнды как набор из 32 битов (нулей и единиц) и возвращают стандартные числовые значения JavaScript.

`&` (en-US)

Оператор побитового И.

`|` (en-US)

Оператор побитового ИЛИ.

`^` (en-US)

Оператор побитового ИСКЛЮЧАЮЩЕГО ИЛИ.

### Бинарные логические операторы

Логические операторы обычно используются вместе с булевыми (логическими) значениями и в сочетании с ними они возвращают булево значение.

`&&` (en-US)

Оператор логического И.

`||` (en-US)

Оператор логического ИЛИ.

### Условный (тернарный) оператор

`(условие ? ifTrue : ifFalse)`

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

### Операторы присваивания

Операторы присваивания присваивают значение своему левому операнду, зависящее от значения их правого операнда.

`=` (en-US)

Оператор присваивания.

`*=` (en-US)

Оператор присваивания с умножением.

`/=` (en-US)

Оператор присваивания с делением.

`%=` (en-US)

Оператор присваивания с взятием остатка от деления.

`+=` (en-US)

Оператор присваивания со сложением.

`-=` (en-US)

Оператор присваивания с вычитанием.

`<<=` (en-US)

Оператор присваивания со сдвигом влево.

`>>=` (en-US)

Оператор присваивания со знаковым сдвигом вправо.

`>>>=` (en-US)

Оператор присваивания с беззнаковым сдвигом вправо.

`&=` (en-US)

Оператор присваивания с побитовым И.

`^=` (en-US)

Оператор присваивания с побитовым ИСКЛЮЧАЮЩИМ ИЛИ.

`|=` (en-US)

Оператор присваивания с побитовым ИЛИ.

`[a, b] = [1, 2]`
`{a, b} = {a:1, b:2}`

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

### Оператор запятая

`,`

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

### Нестандартные особенности

Non-standard Legacy generator function (en-US)

Ключевое слово `function` может быть использовано для определения устаревших функций-генераторов в одном выражении. Для того, чтобы сделать такую функцию, её тело должно содержать хотя бы одно выражение `yield`.

Non-standard Expression closures

Синтаксис закрытого выражения для сокращённого написания простейших функций.

Non-standard `[for (x of y) x]` (en-US)

Упрощённый синтаксис создания массива.

Non-standard `(for (x of y) y)` (en-US)

Упрощённый синтаксис создания генератора.

Спецификации
------------

| 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 |

Смотрите также
--------------

* Приоритеты операторов