MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Арифметические операции

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

Сложение (+)

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

Синтаксис

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).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.

Оператор возведения в степень возвращает результат первого операнда в степень. это, 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 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 ? ? ?

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

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

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