JS для начинающих. Урок 1.7: Арифметические операторы

Количество операндов

Операнд – это то, над чем будет производить действие оператор. Это может быть литерал или переменная. У арифметических операторов может быть один или два операнда. Операторы, производящие действие с одним операндом называются унарными, а с двумя – бинарными.

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

К унарным операторам можно отнести префиксный (постфиксный) инкремент (++) и префиксный (постфиксный) декремент (—). Эти операторы, если их применять к переменным, содержащим числовое значение будут изменять его значение на единицу. Инкремент (++) будет его увеличивать на один, а декремент уменьшать.

1
2
3
4
5
6
7
8
9
var a = 0;
++a; // применяем префиксный инкремент
alert(a); // выведет 1
--a; // применяем префиксный декремент
alert(a); // выведет 0
a++; // применяем постфиксный инкремент
alert(a); // выведет 1
a--; применяем постфиксный декремент
alert(a); // выведет 0


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

1
2
3
4
5
var a = 0;
alert(a++); // выведет 0
alert(a); // выведет уже 1
a--; // это выражение вернёт 1!!
alert(a); // а здесь уже выведет 0


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

1
2
3
var a = 1;
a = -a;
alert(a); // -1


или короче

1
2
var a = 1;
alert(-a);


Обратите внимание, что для выполнения кода примеров необязательно внедрять его в html-код или подключать файл со скриптом в страничке. Достаточно воспользоваться консолью. Так же можно заменить alert на console.log или вовсе опустить его, просто вводя с консоли строку кода, чтобы узнать какое значение содержит переменная или возвращает выражение или функция. В дальнейшем я часто буду опускать вызов этих функций в примерах, подразумевая, что код выполняется в консоли. При этом я буду указывать значение переменной, выражения или функции в комментариях.

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

С некоторыми из них вы уже знакомы. Это +, -, * и /. Думаю здесь ничего объяснять не нужно. Стоит лишь заметить, что + если хотя бы один из операндов строка, выполнит их склейку (по-умному — конкатенацию) и результатом будет строка.

Ещё один из бинарных операторов вам вряд ли знаком, если только вы не учили какой-нибудь другой язык программирования до JavaScript. Это %. Этот оператор возвращает остаток от деления левого операнда на правый. Если левый операнд меньше правого по модулю, то возвращается левый операнд. Например 5 % 2 вернёт 1, 6 % 3 вернёт 0, 2 % 3 вернёт 2 и т.д. Этот оператор в JavaScript так же применим и к дробным числам. Например, 2 % 1.5 вернёт 0.5, 3 % 2.5 вернёт 0.5.

Приоритеты операций

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

Рассмотрим, например, выражение

a + b / c * d – e

Первым выполнится деление b / c, затем умножение результата на d, затем сложение того, что получилось с a и, наконец, ото всего этого отнимется e.

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

(a + b) * c

В этом примере сначала выполнится сложение a + b и только затем умножение результата на c.

Проблемы с точностью

Есть в JavaScript несколько некрасивых вещей. Например, 0.1 + 0.2 возвращает 0.30000000000000004, 0.3 + 0.6 возражает 0.8999999999999999. С делением по модулю (%) дела ещё ужасней. Например, 4 % 0.4 вернёт 0.3999999999999998, 1.2 % 0.5 вернёт 0.19999999999999996. Бороться с этим можно либо отказавшись от дробных значений, либо округляя результат до разумных пределов.

Не забываем про консоль

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

Перейти к содержанию курса «Javascript для начинающих»

  • Молоток!

  • Вячеслав

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

    Если не ошибаюсь, деление имеет такой же приоритет, как и умножение.