`

Операторы в JavaScript

Определение

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

Типы операторов

Операторы в JavaScript принято делить по количеству принимаемых операндов:

Все операторы различают по следующим видам:

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

Унарным называют оператор, принимающий всего один операнд либо с левой либо с правой стороны.

operator operand - например: ++i, где ++ - оператор, а i - операнд, или

operand operator - например:  i++, где i - операнд, а ++ - оператор

Рассмотрим три словесных унарных оператора в JavaScript.

Оператор Описание
delete Удаляет объект, свойство объекта, элемент массива под определенным индексом, а также неявно объявленные переменные (без ключевого слова var). В случае успешного удаления какого-либо элемента, то обращаться к нему уже будет нельзя, т.к. его не существует. Возвращает true если удаление возможно и false если невозможно.
typeof Возвращает строку со значением типа данных операнда. Операндом могут быть переменные, литералы, объекты, свойства объектов и некоторые ключевые слова.
void Оператор void, в основном приводит все значения какого-либо выражения к значению undefined. Вы можете передать в качестве операнда выражение или значение, которые будут преобразованы в undefined. Применение данный оператор находит при использования протокола "javascript: (URI)". После нажатия по ссылке срабатывает код javascript, который не возвращает какое-либо значение, кроме undefined.

Бинарные операторы

Бинарным называют оператор, который принимает два операнда, по одному с каждой стороны.

operand operator operand - например: 2 + 1, где 2 и 1 - операнды, а + - оператор

Данный тип операторов наиболее распространенный. К бинарным операторам относятся: арифметические, логические, операторы сравнения и другие. Все они будут рассмотрены далее.

Тернарные операторы

Тернарный оператор принимает три операнда. В JavaScript существует всего один тернарный оператор - оператор условия (? :). Данный оператор является составным и включает в себя знаки ? и :.

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

В качестве второго и третьего операнда могут выступать некоторые операции, например, присвоение переменных или выполнение функций. 

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

Данные операторы присваивают левому операнду значение правого операнда.

Оператор Значение Описание
x = y x = y Присвоение значения
x += y x = x + y Присвоение со сложением
x -= y x = x - y Присвоение с вычитанием
x *= y x = x * y Присвоение с умножением
x /= y x = x / y Присвоение с делением
x %= y x = x % y Присвоение с вычиcлением остатка
x **= y x = x ** y Присвоение с возведением в степень

Данный оператор носит экспериментальный характер и является частью стандарта ECMAScript 2016 и не работает в браузерах, которые не поддерживают данный стандарт.

x <<= y x = x << y Присвоение с побитовым сдвигом влево
x >>= y x = x >> y Присвоение с побитовым сдвигом вправо
x >>>= y x = x >>> y Присвоение c побитовым сдвигом вправо с заполнением битов слева нулями
x &= y x = x & y Присвоение с побитовым И (AND)
x ^= y x = x ^ y Присвоение с побитовым исключающем ИЛИ (XOR)
x |= y x = x | y Присвоение с побитовым ИЛИ (OR)

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

Операторы сравнения сравнивают свои правый и левый операнд между собой и, на основе истинности этого сравнения, возвращают значение логического типа - true или false. В качестве операндов могут выступать: числовые, строковые, логические или объектные значения. 

Сравнение строк происходит по их лексической последовательности и их шестнадцатеричных кодов Unicode. 

В следующей таблице представлены операторы сравнения в JavaScript.

Оператор Название Описание
x == y Равенство Возвращает true, если операнды не строго равны. Не делает проверки на равенство типов данных и при сравнении одинаковых значений для разных типов данных, возвращает - true.
x != y Неравенство Возвращает true, если операнды не строго не равны. Не делает проверки на неравенство типов данных и при сравнении разных значений для разных типов данных, возвращает - true.
x === y Строгое равенство Возвращает true, если операнды строго равны. Делает проверку на равенство типов данных и при сравнении одинаковых значений для одинаковых типов данных, возвращает - true.
x !== y Строгое неравенство Возвращает true, если операнды строго не равны. Делает проверку на неравенство типов данных и при сравнении разных значений для одинаковых типов данных, возвращает - false.
x > y Больше чем Возвращает true, если левый операнд больше правого.
x >= y Больше чем или равно Возвращает true, если левый операнд больше правого либо равен ему.
x < y Меньше чем Возвращает true, если левый операнд меньше правого.
x <= y Меньше чем или равно Возвращает true, если левый операнд меньше правого либо равен ему.

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

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

Оператор Название Описание
x + y Сложение Возвращает сумму двух операндов.
x - y Вычитание Возвращает разность двух операндов.
x * y Умножение Возвращает произведение двух операндов.
x / y Деление Возвращает частное двух операндов.
x % y Деление с остатком Возвращает остаток от частного двух операндов.

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

Оператор Название Описание
x++ Инкремент Унарный оператор. Добавляет единицу к своему операнду и возвращает его значение.
В зависимости от положения инкремента возвращаемое значение может изменяться. При преинкременте (++x) значение операнда возвращается после приращения на единицу, а при постинкременте (x++) значение операнда возвращается перед приращением на единицу.
x-- Декремент Унарный оператор. Вычитает единицу из своего операнда и возвращает его значение.
В зависимости от положения декремента возвращаемое значение может изменяться. При предекременте (--x) значение операнда возвращается после уменьшения на единицу, а при постдекременте (x--) значение операнда возвращается перед уменьшением на единицу.
-x Отрицание Унарный оператор. Возвращает отрицательное значение операнда.
+x Преобразование к числовому типу Унарный оператор. Преобразование операнда к числовому типу данных, если он не является таковым.
x ** y Возведение в степень Возводит левый операнд в степень значения правого операнда.

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

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

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

В следующей таблице представлены все побитовые операторы.

Оператор Название Описание
x & y Побитовое И (AND) Возвращает единицу, если определнный бит первого и второго операнда - единица
x | y Побитовое ИЛИ (OR) Возвращает единицу, если определнный бит первого и второго операнда - не нуль
x ^ y Побитовое исключающее ИЛИ (XOR) Возвращает единицу, если только один из определенных битов первого и второго операнда - единица
~x Побитовое НЕ (NOT) Изменяет биты на противоположные (где был нуль, там будет единица и наоборот).
x << y Побитовый сдвиг влево Сдвигает каждый бит влево, дополняя новый бит с права нулем. Левый операнд тот, чьи биты будут сдвигаться, а правый определяет количество битов сдвига.
x >> y Побитовый сдвиг вправо Сдвигает каждый бит вправо. Левый операнд тот, чьи биты будут сдвигаться, а правый определяет количество битов сдвига.
x >>> y Побитовый сдвиг вправо Сдвигает каждый бит вправо, дополняя новый бит с лево нулем. Левый операнд тот, чьи биты будут сдвигаться, а правый определяет количество битов сдвига.

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

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

Далее рассмотрим три единственных логических оператора в JavaScritp.

Оператор Название Описание
x && y Логическое И (AND) - возвращается второй операнд, если первый операнд - true;
- возвращается первый операнд, если он - false.
x || y Логическое ИЛИ (OR) - возвращается первый операнд, если оба операнда - true;
- если любой из операндов - true, то возвращается он же;
- если оба оператора - false, то возвращается второй операндp.
!x Логическое НЕ (NOT) Преобразует любое значение к булевому типу и меняет его на противоположный.

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

Реляционные операторы, сопоставляют свои операнды между собой и возвращают Булево значение, на основании истинности их сопоставления.

Оператор Формула Описание
in objectPropertyName in objectName
или
arrayIndexNumber in arrayName
Возвращает - true, если свойство объекта или индекс массива (левый операнд) принадлежит определенному объекту или массиву (правый операнд).
instanceof objectName instanceof objectType Возвращает - true, если объект является экземляром определенного объектного типа.

Оператор New

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

new constructor(arg1, arg2, ... , argn)

Ниже рассмотрим краткий пример использования оператора new.

Оператор вызова

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

Пример использования оператора вызова, представлен ниже.

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

Операторы доступа

К операторам доступа относятся - . (точка) и [ ]. С помощью данных операторов можно получать значение свойств объектов и элементов массивов.

Для оператора точка левым операндом является имя объекта, а правым - имя свойства. Оператор точка применим только к объектам, в то время как оператор [ ] может применяться как для получения свойства объекта, так и для получения значения элемента массива.

objectName.objectProperty

objectName["objectProperty"]

arrayName[elementIndex]

Ниже дан небольшой пример использования операторов доступа.

Оператор "Запятая"

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

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

Также оператор запятая будет полезна внутри тернарного оператора условия. Так, использую оператор запятая, можно указать нескольких выражений, которые выполнятся внутри второго или третьего операнда тернарного оператора, отсюда Вам не придется лишний раз прибегать к созданию блоков условий if else.

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

В следующем примере запятая играет роль разделителя.

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

Приоритет оператора определяет его очередь в исполнении среди других операторов. Так, например, в выражении 1 + 2 * 3, наибольшим приоритетом обладает оператор произведения - *, и, не смотря на то, что чтение выражения идет слева на право, сначала будет выполнено произведение операндов 2 и 3, а затем сумма 1 и 6.

В таблице ниже, представлен список приоритета операторов.

Приоритет Тип оператора Обозначение
1 Доступ к членам объекта/массива . [ ]
2 Вызов / Создание экзепляра класса ( ) new
3 Отрицание / Инкремент ! ~ - + ++ -- typeof void delete
4 Умножение / Деление * / %
5 Сложение / Вычитание + -
6 Побитовый сдвиг << >> >>>
7 Сравнение / Соотношение < <= > >= in instanceof
8 Равенство == != === !==
9 Побитовое И &
10 Побитовое исключающее ИЛИ ^
11 Побитовое ИЛИ |
12 Логическое И &&
13 Логическое ИЛИ ||
14 Оператор условия ?:
15 Присваивание = += -= *= /= %= <<= >>= >>>= &= ^= |=
16 Запятая ,