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.
Un exemple classique :
3 + 4 * 5 // retourne 23
L'opérateur de multiplication (« *
») a une précédence plus haute que l'opérateur d'addition (« +
») et est donc évalué en premier.
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 :
a OP b OP c
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 :
a = b = 5;
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.
Tableau
Le tableau suivant est classé de la plus haute (1) à la plus basse (19) précédence.
Précédence | Type d'opérateur | Associativité | Opérateurs individuels |
---|---|---|---|
0 | Groupement | Non applicable | ( … ) |
1 | Accès à un membre | Gauche à droite | … . … |
Accès à un membre calculé | Gauche à droite | … [ … ] |
|
new (avec une liste d'arguments) |
Non applicable | new … ( … ) |
|
2 | Appel de fonction | Gauche à droite | … ( … ) |
new (sans liste d'arguments) |
Gauche à droite | new … |
|
3 | Incrémentation suffixe | Non applicable | … ++ |
Décrémentation suffixe | Non applicable | … -- |
|
4 | NON logique | Droite à gauche | ! … |
NON binaire | Droite à gauche | ~ … |
|
Plus unaire | Droite à gauche | + … |
|
Négation unaire | Droite à gauche | - … |
|
Incrémentation préfixe | Droite à gauche | ++ … |
|
Décrémentation préfixe | Droite à gauche | -- … |
|
typeof |
Droite à gauche | typeof … |
|
void |
Droite à gauche | void … |
|
delete |
Droite à gauche | delete … |
|
5 | Multiplication | Gauche à droite | … * … |
Exponentation | Droite à gauche | … ** … |
|
Division | Gauche à droite | … / … |
|
Reste | Gauche à droite | … % … |
|
6 | Addition | Gauche à droite | … + … |
Soustraction | Gauche à droite | … - … |
|
7 | Décalage binaire à gauche | Gauche à droite | … << … |
Décalage binaire à droite | Gauche à droite | … >> … |
|
Décalage binaire à droite non-signé | Gauche à droite | … >>> … |
|
8 | Inférieur strict | Gauche à droite | … < … |
Inférieur ou égal | Gauche à droite | … <= … |
|
Supérieur strict | Gauche à droite | … > … |
|
Supérieur ou égal | Gauche à droite | … >= … |
|
in |
Gauche à droite | … in … |
|
instanceof |
Gauche à droite | … instanceof … |
|
9 | Égalité faible | Gauche à droite | … == … |
Inégalité faible | Gauche à droite | … != … |
|
Égalité stricte | Gauche à droite | … === … |
|
Inégalité stricte | Gauche à droite | … !== … |
|
10 | ET binaire | Gauche à droite | … & … |
11 | OU exclusif (XOR) binaire | Gauche à droite | … ^ … |
12 | OU binaire | Gauche à droite | … | … |
13 | ET logique | Gauche à droite | … && … |
14 | OU logique | Gauche à droite | … || … |
15 | Opérateur conditionnel ternaire | Droite à gauche | … ? … : … |
16 | Affectation | Droite à gauche | … = … |
… += … |
|||
… -= … |
|||
… *= … |
|||
… /= … |
|||
… **= … |
|||
… %= … |
|||
… <<= … |
|||
… >>= … |
|||
… >>>= … |
|||
… &= … |
|||
… ^= … |
|||
… |= … |
|||
17 | yield |
Droite à gauche | yield … |
yield* |
Droite à gauche | yield* … |
|
18 | Décomposition | Non applicable | ... … |
19 | Virgule | Gauche à droite | … , … |