Математические операторы в Javascript
Многие операторы мы прекрасно знаем еще со школы: умножение*, сложение+, вычитание- и так далее. Сначала мы рассмотрим простые математические операторы и постепенно придем к специфическим аспектам на Javascript , которые не знакомы со школьных курсов математики.
Термины: «операнд», «унарный», «бинарный»
В первую очередь нужно разобраться с терминологией. Операнд – это то, к чему применяется оператор. К примеру, в умножении 5 * 2 присутствует два операнда: левый = 5, а правый = 2. В некоторых случаях их называют «аргументами».
Унарный – оператор, применяемый к одному операнду. К примеру, унарный оператор «-», меняет знак на противоположный:
let x =1;
x =-x;
alert( x );// -1, применили унарный минус
Бинарный – оператор, применяемый к двум операндам. В бинарной форме существует тот же минус:
let x =1, y =3;
alert( y — x );// 2, бинарный минус вычитает значения
В последнем примере идет речь о двух разных операторах, которые используют один символ: оператор отрицания (унарный, обращающий знак) и оператор вычитания (бинарный, вычитающий одно число из другого).
Какие математические операторы поддерживаются:
+ | Сложение |
— | Вычитание |
* | Умножение |
/ | Делание |
% | Взятие остатка от деления |
** | Возведение в степень |
Приоритеты операторов
Если выражение содержит несколько операторов, то порядок их выполнения определяется приоритетом. Со школьной программы нам известно, что умножение в выражении 1 + 2*2 должно выполнятся раньше сложения. Это и называется приоритетом. Таким образом, сложение имеет меньший приоритет, чем умножение.
Однако скобки важнее, чем приоритет, поэтому их можно использовать для перераспределения приоритета. Например, вы можете написать (1+2) * 2. В языке Javascript много операторов. Каждый из них имеет определенный номер приоритета. Тот оператор, чье число приоритета выше, выполняется первым. В случае равных приоритетов, порядок выполнения производится слева направо.
Приведем таблицу приоритетов в JavaScript
Приоритет | Название | Обозначение |
… | … | … |
17 | унарный плюс | + |
17 | унарный минус | — |
16 | возведение в степень | ** |
15 | умножение | * |
15 | деление | / |
13 | сложение | + |
13 | вычитание | — |
… | … | … |
3 | присваивание | = |
… | … | … |
Примеры арифметических операций
Сложение (+)
Данный оператор объединяет строки или возвращает сумму числовых операндов.
Синтаксис
Operator: x + y.
Примеры
// Number + Number -> сложение
1+2// 3// Boolean + Number -> сложение
true+1// 2// Boolean + Boolean -> сложение
false+false// 0// Number + String -> конкатенация
5+»foo»// «5foo»// String + Boolean -> конкатенация
«foo»+false// «foofalse»// String + String -> конкатенация
«foo»+»bar»// «foobar»
Вычитание (-)
Оператор вычитает один операнд из другого и возвращает разницу.
Синтаксис
Operator: x — y
Примеры
5-3// 2
3-5// -2
«foo»-3// NaN
Деление (/)
Оператор производит деление его операндов, где левый операнд является делимым, а правый выступает в качестве делителя.
Синтаксис
Operator: x / y
Примеры
1/2// возвращает 0.5 в JavaScript
1/2// возвращает 0 в Java
// (так числа не с плавающими точками)1.0/2.0// возвращает 0.5 и в JavaScript и в Java
2.0/0// возвращает Infinity в JavaScript
2.0/0.0// тоже возвращает Infinity
2.0/-0.0// возвращает -Infinity в JavaScript
Умножение (*)
Оператор возвращает произведение операндов.
Синтаксис
Operator: x * y
Примеры
2*2// 4
-2*2// -4
Infinity*0// NaN
Infinity*Infinity// Infinity
«foo»*2// NaN
Остаток от деления (%)
Данный оператор возвращает целый остаток от деления левого операнда на правый. Возвращаемое значение всегда получает знак делимого, а не делителя. Он использует встроенную функцию modulo, для получения результата, которая выступает целочисленным остатком деления var1 на var2 — например— var1 modulo var2.
Синтаксис
Оператор: var1 % var2
Примеры
12%5// 2
-1%2// -1
NaN%2// NaN
1%2// 1
2%3// 2
-4%2// -0
5.5%2// 1.5
Возведение в степень (**)
Оператор возвращает результат первого операнда в степень. это, var1var2, в прошлом выражении, где var1 и var2 — переменные. Он право ассоциативен. a ** b ** c равно a ** (b ** c).
Синтаксис
Оператор: var1 ** var2
Замечания
Во многих языках, таких как Python и PHP и других, есть оператор возведения возведения в степень (обычно ** или ^), оператор определён имеющим приоритет выше, чем у унарных операторов, таких как унарный + и унарный -, но есть некоторые исключения.
К примеру, в Bash оператор ** создан с приоритетом ниже, чем у унарных операторов. В Javascript невозможно написать двусмысленное выражение, то есть вы не можете ставить унарный оператор (+/-/~/!/delete/void/typeof) перед базовым числом.
-2**2;
// 4 в Bash, -4 в других языках.
// Это некорректно в JavaScript, т.е. операция двухсмыслена.-(2**2);
// -4 в JavaScript, намерения автора однозначны.
Примеры
2**3// 8
3**2// 9
3**2.5// 15.588457268119896
10**-1// 0.1
NaN**2// NaN2**3**2// 512
2**(3**2)// 512
(2**3)**2// 64
Изменим знак результата возведения в степень:
-(2**2)// -4
Несильная установка основания как отрицательного числа:
(-2)**2// 4
Инкремент (++)
Оператор увеличивает операнд на единицу и возвращает значение.
- Если операция применяется как постфикс, с оператором после операнда (к примеру, x++), значение операнда возвращается, а потом увеличивается на единицу.
- Если применяется префиксная форма с оператором перед операндом (к примеру, ++x), значение операнда возвращается увеличенным на единицу.
Синтаксис
Оператор: x++ или ++x
Примеры
// Постфиксный
var x =3;
y = x++;// y = 3, x = 4// Префиксный
var a =2;
b =++a;// a = 3, b = 3
Декремент (—)
Операция декремента уменьшает на 1 свой операнд и возвращает значение.
- Если операция применяется как постфикс (например, x—), значение операнда возвращается, после чего уменьшается на единицу.
- Если применяется префиксная форма (например, —x), значение операнда возвращается уменьшенным на единицу.
Синтаксис
Оператор: x— или —x
Примеры
// Постфиксный
var x =3;
y = x—;// y = 3, x = 2// Префиксный
var a =2;
b =—a;// a = 1, b = 1
Унарный минус (-)
Унарный минус ставится перед операндом и возвращает его математическое отрицание.
Синтаксис
Оператор: -x
Примеры
var x =3;
y =-x;// y = -3, x = 3
Унарный плюс (+)
Оператор предшествует своему операнду и оценивает его, пытается преобразовать его в число, если он им не является. Также унарное отрицание (-) конвертирует не числа, унарный плюс — предпочитаемый и быстрейший способ конвертирования чего-либо в число потому, что он не выполняет никаких операций с числом. Он может конвертировать строковые представления целых и чисел с плавающей точкой, а также нестроковые значения true, false и null.
Поддерживаются числа в десятичном и шестнадцатеричном (с префиксом «0x») формате. Также поддерживаются отрицательные числа (но не 16-ричные). Если он не может вычислить конкретное значение, выполнится как NaN.
Синтаксис
Оператор: +x
Примеры
+3// 3
+»3″// 3
+true// 1
+false// 0
+null// 0