Операторы, выражения и инструкции 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>
.