Арифметические операции принимают в качестве операндов числовые значения (это может быть и литерал и переменная) и возвращают результат в виде одного числового значения. Стандартными арифметическими операциями являются сложение (+), вычитание (-), умножение (*) и деление (/).

Сложение (+)

Оператор сложения возвращает сумму числовых операндов или объединяет строки.

Синтаксис

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

Возведение в степень (**)

Оператор возведения в степень возвращает результат первого операнда в степень. это, var1var2, в предыдущем выражении, где 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 Latest Draft (ECMA-262) Черновик  

Поддержка браузерами

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidEdge MobileFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
Addition (+)Chrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка 1IE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 4Opera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Даnodejs Полная поддержка Да
Decrement (--)Chrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка 1IE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 4Opera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Даnodejs Полная поддержка Да
Division (/)Chrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка 1IE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 4Opera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Даnodejs Полная поддержка Да
Exponentiation (**)Chrome Полная поддержка 52Edge Полная поддержка 14Firefox Полная поддержка 52IE Нет поддержки НетOpera Полная поддержка ДаSafari Полная поддержка 10.1WebView Android Полная поддержка 51Chrome Android Полная поддержка 52Edge Mobile Полная поддержка 14Firefox Android Полная поддержка 52Opera Android Полная поддержка ДаSafari iOS Полная поддержка 10.1Samsung Internet Android Полная поддержка 6.0nodejs Полная поддержка 7.0.0
Полная поддержка 7.0.0
Полная поддержка 6.5.0
Отключено
Отключено From version 6.5.0: this feature is behind the --harmony runtime flag.
Increment (++)Chrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка 1IE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 4Opera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Даnodejs Полная поддержка Да
Multiplication (*)Chrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка 1IE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 4Opera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Даnodejs Полная поддержка Да
Remainder (%)Chrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка 1IE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 4Opera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Даnodejs Полная поддержка Да
Subtraction (-)Chrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка 1IE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 4Opera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Даnodejs Полная поддержка Да
Unary negation (-)Chrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка 1IE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 4Opera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Даnodejs Полная поддержка Да
Unary plus (+)Chrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка 1IE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 4Opera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Даnodejs Полная поддержка Да

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Пользователь должен сам включить эту возможность.
Пользователь должен сам включить эту возможность.

Смотрите также

Метки документа и участники

Внесли вклад в эту страницу: mdnwebdocs-bot, fscholz, wbamberg, MedvedevWeb, kachid, shark_ate_my_shorts, ktsabolov, BychekRU, Anthelion, Aleksej, teoli, Dionys, karasiov
Обновлялась последний раз: mdnwebdocs-bot,