Операторы, выражения и инструкции JavaScript — это основные строительные кирпичики программ. С их помощью можно манипулировать значениями, сравнивать их между собой, производить вычисления и решать множество прочих задач. В этом уроке вы познакомитесь с тем, как работают операторы и узнаете о том, как использовать их с максимальной пользой.

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

Операторы предназначены для составления выражений. Оператор применяется к одному или двум данным, которые называются операндами или аргументами оператора.
Например, в следующем примере знак + (плюс) – это оператор, объединяющий два операнда в одно выражение:

var x = 5 + 7

Операторы, работающие с единственным операндом, называются унарными. Это самые простые операторы в JavaScript.

Оператор - (минус), в следующем примере, представляет собой унарный оператор, выполняющий смену знака для операнда 3:

Выполнить код »

Большинство JavaScript-операторов объединяют два выражения в одно, более сложное. Таким образом, эти операторы работают с двумя операндами и называются бинарными:

Выполнить код »

Работая с выражениями, следует уделять внимание типам операндов, передаваемых операторам, а также типам данных, возвращаемых этими операторами.
Некоторые операторы могут взаимодействовать с операндами только определенного типа. Например, в JavaScript является недопустимым умножение строк:

Выполнить код »

Интерпретатор JavaScript, если возможно, преобразовывает рассматриваемое выражение в требуемый тип, поэтому следующее выражение вполне допустимо:

Выполнить код »

Существуют операторы которые ведут себя по-разному в зависимости от типа передаваемых им операндов. Например, оператор сложения +, который, как правило, осуществляет сложение числовых операндов, выполняет конкатенацию («склеивание») строк. Результатом выполнения этой операции является строка, состоящая из строковых значений операндов:

Выполнить код »

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

Выполнить код »

На заметку: Если при сложении хотя бы один операнд является строкой, то второй будет также преобразован к строке.

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

Выполнить код »

В случае, когда в выражении используется несколько операторов – порядок их выполнения определяется приоритетом. Операторы с более высоким приоритетом выполняются раньше операторов с более низким приоритетом. Рассмотрим следующий пример:

Выполнить код »

Из школьного курса математики мы знаем, что приоритет оператора * (умножение) выше, чем сложения, поэтому сначала 4 будет умножено на 5. Затем полученный результат будет разделен на 2, так как приоритет оператора / (деление) выше, чем сложения. Далее, к полученному результу будет добавлено значение 7. И, наконец, оператор присваивания = имеет наименьший приоритет, поэтому присваивание выполняется после завершения всех операций в правой части. В результате переменной sum будет присвоено значение 17.

Приоритет операторов может быть переопределен с помощью скобок. Для того, чтобы сложение в предыдущем примере выполнялось раньше, надо написать:

Выполнить код »

В этом примере сначала будет выполнено сложение (7 + 4), а затем полученный результат будет умножен на 5 и разделен на 2. Операторы умножения и деления имеют одинаковый приоритет, поэтому они выполняются слева направо, то есть в порядке их следования.

В таблице ниже операторы перечислены в порядке уменьшения от наивысшего (20) до самого низкого (0) приоритета.

Приоритет Описание Ассоциативность Оператор
20 Группирование отсутствует ( … )
19 Оператор доступа слева направо … . …
Оператор доступа слева направо … [ … ]
new (со списком аргументов) отсутствует new … ( … )
Вызов функции слева направо … ( … )
18 new (без списка аргументов) справа налево new …
17 Постфиксный инкремент отсутствует … ++
Постфиксный инкремент отсутствует … --
16 Логическое НЕ справа налево ! …
Побитовое НЕ справа налево ~ …
Унарный плюс справа налево + …
Унарный минус справа налево - …
Префиксный инкремент справа налево ++ …
Префиксный декремент справа налево -- …
Тип операнда справа налево typeof …
Возврат undefined справа налево void …
Удаление справа налево delete …
15 Возведение в степень справа налево … ** …
14 Умножение слева направо … * …
Деление слева направо … / …
Деление с остатком слева направо … % …
13 Сложение слева направо … + …
Вычитание слева направо … - …
12 Сдвиг битов влево слева направо … << …
Сдвиг битов вправо с сохранением знака слева направо … >> …
Сдвиг битов вправо с заполнением нулями слева направо … >>> …
11 Меньше чем слева направо … < …
Меньше или равно слева направо … <= …
Больше чем слева направо … > …
Больше или равно слева направо … >= …
Проверка наличия свойства слева направо … in …
Проверка на принадлежность к данному типу слева направо … instanceof …
10 Равно слева направо … == …
Не равно слева направо … != …
Строго равно слева направо … === …
Строго не равно слева направо … !== …
9 Побитовое И слева направо … & …
8 Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ слева направо … ^ …
7 Побитовое ИЛИ слева направо … | …
6 Логические И слева направо … && …
5 Логический ИЛИ слева направо … || …
4 Тернарный оператор справа налево … ? … : …
3 Присваивание справа налево … = …
3 Присваивание со сложением справа налево … += …
3 Присваивание с вычитанием справа налево … -= …
3 Присваивание с возведением в степень справа налево … **= …
3 Присваивание с умножением справа налево … *= …
3 Присваивание с делением справа налево … /= …
3 Присваивание по модулю справа налево … %= …
3 Присваивание с левым сдвигом справа налево … <<= …
3 Присваивание с правым сдвигом справа налево … >>= …
3 Присваивание с беззнаковым сдвигом вправо справа налево … >>>= …
3 Присваивание с побитовым И справа налево … &= …
3 Присваивание с исключающим побитовым ИЛИ справа налево … ^= …
3 Присваивание с побитовым ИЛИ справа налево … |= …
2 yield справа налево yield …
2 yield* справа налево yield* …
1 Расширение отсутствует ... ...
0 Запятая слева направо … , …

Применение: Если в коде содержится два и более операторов с одинаковым приоритетом, то очередность их выполнения определяется их ассоциативностью — характеристикой оператора, определяющей направление вычислений: слева направо или справа налево.

  • Опepaтopы в JavaScript уникальны в том смысле, что их можно задействовать с самыми различными значениями, включая строки, числа, логические значения и даже объекты.
  • Операторы предназначены для составления выражений. Оператор применяется к одному или двум данным, которые называются операндами.
  • Приоритет операторов определяет очередность их выполнения в выражении. Все операторы делятся на группы с различными уровнями приоритета от 0 до 20.

Комментарии

пожелания к комментариям…
  • Приветствуются комментарии, соответствующие теме урока: вопросы, ответы, предложения.
  • Одну строчку кода оборачивайте в тег <code>, несколько строчек кода — в теги <pre><code>...ваш код...</code></pre>.
  • Допускаются ссылки на онлайн-песочницы (codepen, plnkr, JSBin и др.).