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

Сложение (+)

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

Синтаксис

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) Черновик  

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

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) (Да) (Да) (Да) (Да)
Оператор возведения в степень ? Nightly build ? ? ?
Возможность Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) (Да) (Да) (Да) (Да)
Оператор возведения в степень ? ? Nightly build ? ? ?

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

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

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