Арифметичні оператори

Арифметичні оператори приймають числові значення (або літерали, або змінні) в якості операндів та повертають єдине числове значення. Стандартними арифметичними операторами є додавання (+), віднімання (-), множення (*) та ділення (/).

Додавання (+)

Оператор додавання повертає суму числових операндів або об'єднання рядків.

Синтаксис

Оператор: 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"

Віднімання (-)

Оператор віднімання проводить операцію віднімання між двома операндами, повертаючи різницю між ними.

Синтаксис

Оператор: x - y

Приклади

5 - 3 // 2
3 - 5 // -2
'foo' - 3 // NaN

Ділення (/)

Оператор ділення повертає частку своїх операндів, де лівий операнд є діленим, а правий операнд є дільником.

Синтаксис

Оператор: 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

Множення (*)

Оператор множення повертає добуток операндів.

Синтаксис

Оператор: x * y

Приклади

2 * 2 // 4
-2 * 2 // -4
Infinity * 0 // NaN
Infinity * Infinity // Infinity
'foo' * 2 // NaN

Остача (%)

Оператор остачі повертає остачу від ділення першого операнду на другий. Він завжди приймає знак діленого.

Синтаксис

Оператор: var1 % var2

Приклади

12 % 5 // 2
-1 % 2 // -1
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

Заувага: JavaScript також має бітовий оператор ^ (логічний XOR). ** та ^ відрізняються (наприклад: 2 ** 3 === 8, тоді як 2 ^ 3 === 1.)

Інкремент (++)

Оператор інкременту збільшує свій операнд (додає одиницю) та повертає його значення.

  • Якщо оператор використовується постфіксно, після операнду (наприклад, x++), тоді він збільшує значення та повертає його до збільшення.
  • Якщо оператор використовується префіксно, перед операндом (наприклад, ++x), тоді він збільшує значення та повертає його після збільшення.

Синтаксис

Оператор: x++ або ++x

Приклади

// Постфіксний 
var x = 3;
y = x++; // y = 3, x = 4

// Префіксний
var a = 2;
b = ++a; // a = 3, b = 3

Декремент (--)

Оператор декременту зменшує свій операнд (віднімає одиницю) та повертає його значення.

  • Якщо оператор використовується постфіксно, після операнду (наприклад, 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

// Унарний мінус може перетворити нечислове значення на число
var x = "4";
y = -x; // y = -4

Унарний плюс (+)

Унарний плюс ставиться перед своїм операндом та повертає значення операнду, але намагається перетворити його на число, якщо він не є числом. Хоча унарний мінус (-) також вміє перетворювати нечислові значення, унарний плюс найшвидший та найкращий спосіб перетворити щось у число, тому що він не виконує ніяких інших операцій з числом. Він може перетворювати рядкові представлення цілих чисел та чисел з рухомою комою, а також нерядкові значення true, false та null. Підтримуються цілі числа у десятковому та шістнадцятковому форматах. Підтримуються від'ємні числа (хоча не у шістнадцятковому форматі). Якщо оператор не може розібрати певне значення, він поверне NaN.

Синтаксис

Оператор: +x

Приклади

+3     // 3
+'3'   // 3
+true  // 1
+false // 0
+null  // 0
+function(val){ return val } // NaN

Специфікації

Специфікація Статус Коментар
ECMAScript Latest Draft (ECMA-262) Draft
ECMAScript 2016 (ECMA-262) Standard Доданий Оператор піднесення до степеня.
ECMAScript 2017 (ECMA-262) Standard
ECMAScript 2015 (6th Edition, ECMA-262) Standard Визначені у кількох розділах специфікації: Адитивні оператори, мультиплікативні оператори, постфіксні вирази, унарні оператори.
ECMAScript 5.1 (ECMA-262) Standard Визначені у кількох розділах специфікації: Адитивні оператори, мультиплікативні оператори, постфіксні вирази, унарні оператори.
ECMAScript 1st Edition (ECMA-262) Standard Початкове визначення.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Addition (+)Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
Decrement (--)Chrome Full support 2Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
Division (/)Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
Exponentiation (**)Chrome Full support 52Edge Full support 14Firefox Full support 52IE No support NoOpera Full support YesSafari Full support 10.1WebView Android Full support 51Chrome Android Full support 52Firefox Android Full support 52Opera Android Full support YesSafari iOS Full support 10.3Samsung Internet Android Full support 6.0nodejs Full support 7.0.0
Full support 7.0.0
Full support 6.5.0
Disabled
Disabled From version 6.5.0: this feature is behind the --harmony runtime flag.
Increment (++)Chrome Full support 2Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
Multiplication (*)Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
Remainder (%)Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
Subtraction (-)Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
Unary negation (-)Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes
Unary plus (+)Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes

Legend

Full support  
Full support
No support  
No support
User must explicitly enable this feature.
User must explicitly enable this feature.

Див. також