Les opérateurs arithmétiques utilisent des valeurs numériques (variables ou littéraux) comme opérandes et renvoient une valeur numérique. Les opérateurs arithmétiques standard sont l'addition (+), la soustraction (-), la multiplication (*), et la division (/).

Addition (+)

L'opérateur d'addition permet d'obtenir la somme des opérandes numériques ou bien la concaténation de chaînes de caractères.

Syntaxe

Opérateur : x + y

Exemples

 concaténation
"toto" + false // "totofalse"

// chaîne de caractères + chaîne de caractères -> concaténation
"toto" + "truc" // "tototruc"

Soustraction (-)

L'opérateur de soustraction soustrait les deux opérandes pour obtenir leur différence.

Syntaxe

Opérateur : x - y

Exemples

5 - 3 // 2
3 - 5 // -2
"toto" - 3 // NaN

Division (/)

L'opérateur de division produit le quotient de ces opérandes avec l'opérande gauche comme numérateur et l'opérande droit comme dénominateur.

Syntaxe

Opérateur : x / y

Exemples

1 / 2      // renvoie 0.5 en JavaScript
1 / 2      // renvoie 0 en Java 
// (aucun des deux opérandes n'est un nombre flottant de façon explicite)

1.0 / 2.0  // renvoie 0.5 en JavaScript et Java

2.0 / 0    // renvoie Infinity (pour l'infini) en JavaScript
2.0 / 0.0  // renvoie Infinity également
2.0 / -0.0 // renvoie -Infinity en JavaScript

Multiplication (*)

L'opérateur de multiplication permet d'obtenir le produit des opérandes.

Syntaxe

Opérateur : x * y

Exemples

2 * 2 // 4
-2 * 2 // -4
Infinity * 0 // NaN
Infinity * Infinity // Infinity
"toto" * 2 // NaN

Reste (%)

L'opérateur « reste » renvoie le reste de la division du premier opérande par le second. Le résultat obtenu a toujours le signe du numérateur (la quantité divisée).

Syntaxe

Opérateur : var1 % var2

Exemples

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

Exponentiation (**)

L'opérateur d'exponentiation (aussi appelé opérateur de puissance) renvoie le résultat de l'élévation d'un nombre (premier opérande) à une puissance donnée (deuxième opérande). Par exemple : var1 ** var2 sera équivalent à var1var2 en notation mathématique. Cet opérateur est associatif à droite, autrement dit a ** b ** c est égal à a ** (b ** c).

Syntaxe

Opérateur : var1 ** var2

Notes

Dans la plupart des langages (par exemple PHP, Python, etc.), l'opérateur d'exponentiation est défini avec une précédence supérieure à celle des opérateurs unaires tels que le plus unaire et le moins unaire. Des exceptions existent comme Bash où l'opérateur ** a une précédence inférieure à celle des opérateurs unaires. En JavaScript, il est impossible d'écrire une expression ambigüe avec l'exponentiation : il est impossible de placer un opérateur unaire juste avant le nombre.

-2 ** 2;
// vaut 4 en Bash ou -4 avec d'autres langages
// C'est invalide en JavaScript car il y 
// une ambiguïté liée à l'expression

- (2 ** 2);
// -4 en JavaScript car les parenthèses lèvent
// l'ambiguïté

Exemples

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

Note : JavaScript possède également un opérateur binaire ^ (XOR logique). ** et ^ sont deux opérateurs bien différents. Par exemple 2 ** 3 === 8 et 2 ^ 3 === 1.

Incrément (++)

L'opérateur d'incrément ajoute une unité à son opérande et renvoie une valeur.

  • Si l'opérateur est utilisé en suffixe (par exemple : x++), il renvoie la valeur avant l'incrémentation.
  • Si l'opérateur est utilisé en préfixe (par exemple : ++x), il renvoie la valeur après l'incrémentation.

Syntaxe

Opérateur : x++ ou ++x

Exemples

// Suffixe
var x = 3;
y = x++; // y = 3, x = 4

// Préfixe
var a = 2;
b = ++a; // a = 3, b = 3

Décrément (--)

L'opérateur de décrément soustrait une unité à son opérande et renvoie une valeur.

  • Si l'opérateur est utilisé en suffixe (par exemple : x--), il renvoie la valeur avant la décrémentation.
  • Si l'opérateur est utilisé en préfixe (par exemple : --x), il renvoie la valeur après la décrémentation.

Syntaxe

Opérateur : x-- ou --x

Exemples

// Suffixe
var x = 3;
y = x--; // y = 3, x = 2

// Préfixe
var a = 2;
b = --a; // a = 1, b = 1

Négation unaire (-)

L'opérateur de négation unaire précède son opérande et prend l'opposé de celui-ci (après l'avoir converti en nombre si besoin).

Syntaxe

Opérateur : -x

Exemples

var x = 3;
y = -x; // y = -3, x = 3

// La négation unaire permet de convertir 
// un opérande en nombre
var y = "4";
var z = -y; // z = -4

Plus unaire (+)

L'opérateur unaire plus (+) précède son opérande, l'évaluation correspond à son opérande, converti en nombre si possible et si ce n'est pas déjà un nombre. Bien que l'opérateur de négation unaire (-) puisse également convertir les expressions qui ne sont pas des nombres, le plus unaire est la méthode la plus efficace et celle la plus utilisée pour convertir quelque chose en un nombre car la conversion est la seule opération effectuée. Cet opérateur permet de convertir les chaînes de caractères représentant des nombres entiers, des nombres flottants ainsi que les valeurs true, false, et null. Les entiers, représentés sous forme décimale ou hexadécimale (préfixés par "0x"), sont supportés. Les nombres négatifs sont également supportés (mais pas au format hexadécimal). Si l'opérateur ne peut pas analyser l'opérande fourni, il sera évalué à NaN.

Syntaxe

Opérator : +x

Exemples

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

Spécifications

Spécification État Commentaires
ECMAScript 1st Edition (ECMA-262) Standard Définition initiale
ECMAScript 5.1 (ECMA-262) Standard Définis au sein de plusieurs sections de cette spécification : Opérateurs additifs, opérateurs multiplicatifs, expressions postfixes, opérateurs unaires.
ECMAScript 2015 (6th Edition, ECMA-262) Standard Définis au sein de plusieurs sections de cette spécification : Opérateurs additifs, opérateurs multiplicatifs, expressions postfixes, opérateurs unaires.
ECMAScript 2016 (ECMA-262) Standard Ajout de l'opérateur d'exponentiation.
ECMAScript 2017 (ECMA-262) Standard  
ECMAScript Latest Draft (ECMA-262) Projet  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari pour iOSSamsung InternetNode.js
Addition (+)Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Decrement (--)Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Division (/)Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Exponentiation (**)Chrome Support complet 52Edge Support complet 14Firefox Support complet 52IE Aucun support NonOpera Support complet OuiSafari Support complet 10.1WebView Android Support complet 51Chrome Android Support complet 52Edge Mobile Support complet 14Firefox Android Support complet 52Opera Android Support complet OuiSafari iOS Support complet 10.1Samsung Internet Android Support complet 6.0nodejs Support complet 7.0.0
Support complet 7.0.0
Support complet 6.5.0
Désactivée
Désactivée From version 6.5.0: this feature is behind the --harmony runtime flag.
Increment (++)Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Multiplication (*)Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Remainder (%)Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Subtraction (-)Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Unary negation (-)Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Unary plus (+)Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
Contributeurs à cette page : SphinxKnight, PhilippePerret, alexisdelee, teoli, Jeremie, Mgjbot, BenoitL
Dernière mise à jour par : SphinxKnight,