Précédence des opérateurs - JavaScript | MDN

La précédence des opérateurs détermine l'ordre dans lequel les opérateurs sont évalués. Les opérateurs avec la plus haute précédence sont évalués en premier.

Ainsi, l'opérateur de multiplication (« * ») (ayant une précédence plus haute que l'opérateur d'addition (« + »)) est évalué en premier et l'expression 6 * 4 + 2 renverra 26 (et pas 36).

Exemple interactif

console.log(3 + 4 * 5); // 3 + 20
// Expected output: 23

console.log(4 * 3 ** 2); // 4 * 9
// Expected output: 36

let a;
let b;

console.log((a = b = 5));
// Expected output: 5

Associativité

L'associativité détermine l'ordre dans lequel des opérateurs de même précédence sont évalués. Par exemple, considérons l'expression suivante :

Une associativité de gauche (gauche à droite) signifie qu'elle est évaluée comme (a OP b) OP c, tandis qu'une associativité de droite (droite à gauche) signifie qu'elle est interprétée comme a OP (b OP c). Les opérateurs d'affectation sont associatifs de droite, on peut donc écrire :

avec le résultat attendu que a et b obtiennent la même valeur de 5. C'est parce que l'opérateur d'affectation retourne la valeur qu'il affecte. D'abord, b est défini à la valeur 5. Ensuite, a est défini avec la valeur renvoyée par b = 5 qui est 5.

Exemples

js

3 > 2 && 2 > 1;
// renvoie true

3 > 2 > 1;
// renvoie false car 3 > 2 vaut true et que true > 1 vaut false
// En ajoutant des parenthèses, on y voit plus clair (3 > 2) > 1

Tableau

Le tableau suivant est classé de la plus haute (19) à la plus basse (1) précédence.

Précédence Type d'opérateur Associativité Opérateurs individuels
19 Groupement Non applicable ( … )
18 Accès à un membre Gauche à droite … . …
Accès à un membre calculé … [ … ]
new (avec une liste d'arguments) Non applicable new … ( … )
Appel de fonction Gauche à droite … ( )
Chaînage optionnel ?.
17 new (sans liste d'arguments) Droite à gauche new …
16 Incrémentation suffixe Non applicable … ++
Décrémentation suffixe … --
15 NON logique (!) Droite à gauche ! …
NON binaire (~) ~ …
Plus unaire (+) + …
Négation unaire (-) - …
Incrémentation préfixe ++ …
Décrémentation préfixe -- …
typeof typeof …
void void …
delete delete …
await await …
14 Exponentiation (**) Droite à gauche … ** …
13 Multiplication (*) Gauche à droite … * …
Division (/) … / …
Reste (%) … % …
12 Addition (+) Gauche à droite … + …
Soustraction (-) … - …
11 Décalage binaire à gauche (<<) Gauche à droite … << …
Décalage binaire à droite (>>) … >> …
Décalage binaire à droite non-signé (>>>) … >>> …
10 Inférieur strict (<) Gauche à droite … < …
Inférieur ou égal (<=) … <= …
Supérieur strict (>) … > …
Supérieur ou égal (>=) … >= …
in … in …
instanceof … instanceof …
9 Égalité faible (==) Gauche à droite … == …
Inégalité faible (!=) … != …
Égalité stricte (===) … === …
Inégalité stricte (!==) … !== …
8 ET binaire (&) Gauche à droite … & …
7 OU exclusif / XOR binaire (^) Gauche à droite … ^ …
6 OU binaire (|) Gauche à droite … | …
5 ET logique (&&) Gauche à droite … && …
4 OU logique (||) Gauche à droite … || …
Coalescence des nuls (??) … ?? …
3 Opérateur conditionnel ternaire Droite à gauche … ? … : …
2 Affectation Droite à gauche … = …
… += …
… -= …
… **= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
… &&= …
… ||= …
… ??= …
yield Droite à gauche yield …
yield* yield* …
1 Virgule Gauche à droite … , …

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par les contributeurs du MDN.