Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Précédence des opérateurs
Lapré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'expression6 * 4 + 2 renverra 26 (et pas 36).
Dans cet article
Exemple interactif
console.log(3 + 4 * 5); // 3 + 20// Expected output: 23console.log(4 * 3 ** 2); // 4 * 9// Expected output: 36let a;let b;console.log((a = b = 5));// Expected output: 5Associativité
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 :
a OP b OP cUne 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 commea OP (b OP c). Les opérateurs d'affectation sont associatifs de droite, on peut donc écrire :
a = b = 5;avec le résultat attendu quea etb 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 parb = 5 qui est 5.
Exemples
3 > 2 && 2 > 1;// renvoie true3 > 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) > 1Tableau
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 | … , … |