Арифметические операции принимают в качестве операндов числовые значения (это может быть и литерал и переменная) и возвращают результат в виде одного числового значения. Стандартными арифметическими операциями являются сложение (+
), вычитание (-
), умножение (*
) и деление (/
).
Сложение (+)
Оператор сложения возвращает сумму числовых операндов или объединяет строки.
Синтаксис
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
. Есть предложение добавить оператор modulo в будующие версии ECMAScript, с той разницей, что оператор будет брать делителя, а не делимого.
Синтаксис
Оператор: 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
Возведение в степень (**)
Это экспериментальная технология, часть предложения Harmony (ECMAScript 7).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.
Оператор возведения в степень возвращает результат первого операнда в степень. это, var1
var2
, в предыдущем выражении, где var1
и var2
- переменные. Он право ассоциативен. a ** b ** c
равно a ** (b ** c)
.
Синтаксис
Оператор: var1 ** var2
Замечания
Во многих языках, таких как PHP и Python и других, есть оператор возведения возведения в степень (обычно ^ или **), оператор определён имеющим приоритет выше, чем у унарных операторов, таких как унарный + и унарный -, но есть несколько исключений. Например, в 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 // NaN 2 ** 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
Спецификации
Спецификация | Статус | Примечание |
---|---|---|
ECMAScript 1st Edition (ECMA-262) | Стандарт | Изначальное определение |
ECMAScript 5.1 (ECMA-262) | Стандарт | Определено в нескольких секциях специфии: Additive operators, Multiplicative operators, Postfix expressions, Unary operators. |
ECMAScript 2015 (6th Edition, ECMA-262) | Стандарт | Определено в нескольких секциях специфии: Additive operators, Multiplicative operators, Postfix expressions, Unary operators. |
ECMAScript 2016 (ECMA-262) | Стандарт | Добавлен Оператор возведения в степень. |
ECMAScript 2017 Draft (ECMA-262) | Черновик |
Поддержка браузерами
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) |
Оператор возведения в степень | ? | Nightly build | ? | ? | ? |
Возможность | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |
Оператор возведения в степень | ? | ? | Nightly build | ? | ? | ? |