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

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

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

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

Синтаксис

Оператор: 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 (ECMA-262) Living Standard
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 Початкове визначення.

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

No compatibility data found. Please contribute data for "javascript.operators.arithmetic" (depth: 1) to the MDN compatibility data repository.

Див. також