Précédence des opérateurs

par 3 contributeurs :

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 à la valeur de b.

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 …
18 Décomposition Non applicable ...
19 Virgule Gauche à droite … , …

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight, teoli, Blackhole
Dernière mise à jour par : SphinxKnight,
Masquer la barre latérale