Expressions et opérateurs
Ce chapitre documente l'ensemble des opérateurs, expressions et mots-clés pour le langage JavaScript.
Expressions et opérateurs par catégorie
Pour une liste triée par ordre alphabétique, voir sur la barre de navigation à gauche.
Expressions primaires
Les mots-clés de base et les expressions générales en JavaScript. Ces expressions ont la plus haute priorité (plus élevée que celle des opérateurs).
this-
Le mot-clé
thisfait référence à une propriété spéciale d'un contexte d'exécution. - Littéraux
-
Littéraux de base
null, booléens, nombres et chaînes de caractères. []-
Syntaxe d'initialisation/littérale d'un tableau.
{}-
Syntaxe d'initialisation/littérale d'un objet.
function-
Le mot-clé
functiondéfinit une expression de fonction. class-
Le mot-clé
classdéfinit une expression de classe. function*-
Le mot-clé
function*définit une expression de fonction génératrice. async function-
Le mot-clé
async functiondéfinit une expression de fonction asynchrone. async function*-
Les mots-clés
async function*définissent une expression de fonction génératrice asynchrone. /ab+c/i-
Syntaxe littérale des expressions régulières.
`string`-
Syntaxe des littéraux gabarits.
( )-
Opérateur de regroupement.
Expression « vers la gauche »
Les valeurs situées à gauche sont la cible de l'affectation.
- Accesseurs de propriété
-
Les opérateurs d'accès aux membres permettent d'accéder à une propriété ou à une méthode d'un objet (
object.propertyetobject["property"]). ?.-
L'opérateur de chaînage optionnel retourne
undefinedau lieu de provoquer une erreur si une référence est &équivalent à nulle (nullouundefined). new-
L'opérateur
newcrée une instance d'un constructeur. new.target-
Dans les constructeur,
new.targetfait référence au constructeur qui est invoqué parnew. import.meta-
Un objet exposant des métadonnées spécifiques au contexte à un module JavaScript.
super-
Le mot-clé
superappelle le constructeur parent ou permet d'accéder aux propriétés de l'objet parent. import()-
La syntaxe
import()permet de charger un module de manière asynchrone et dynamique dans un environnement qui n'est pas nécessairement un module.
Incrémentation et décrémentation
Des opérateurs préfixes ou suffixes pour incrémenter/décrémenter.
Opérateurs unaires
Une opération unaire est une opération qui ne manipule qu'un seul opérande.
delete-
L'opérateur
deletesupprime une propriété dans un objet. void-
L'opérateur
voidévalue une expression et ignore sa valeur de retour. typeof-
L'opérateur
typeofdétermine le type d'un objet donné. +-
L'opérateur plus unaire convertit son opérande en type
Number. --
L'opérateur de négation unaire convertit son opérande en type
Number, puis le rend négatif. ~-
L'opérateur NOT binaire.
!-
L'opérateur NOT logique.
await-
Met en pause puis reprend une fonction asynchrone et attend que la promesse soit complétée/rompue.
Opérateurs arithmétiques
Les opérateurs arithmétiques prennent des valeurs numériques (littéraux ou variables) comme opérandes et retournent une seule valeur numérique.
Opérateurs relationnels
Un opérateur de comparaison compare ses opérandes et renvoie une valeur booléenne en fonction de la vérité de cette comparaison.
<(Moins que)-
L'opérateur d'infériorité stricte.
>(Plus que)-
L'opérateur de supériorité stricte.
<=-
L'opérateur d'infériorité.
>=-
L'opérateur de supériorité.
instanceof-
L'opérateur
instanceofdétermine si un objet est une instance d'un autre objet. in-
L'opérateur
indétermine la présence d'une propriété donnée au sein d'un objet.
Note :
=> n'est pas un opérateur, mais la notation utilisée pour les fonctions fléchées.
Opérateurs d'égalité
Le résultat de l'évaluation fournie par un opérateur d'égalité est toujours un booléen, fonction de la vérité de la comparaison effectuée.
Opérateurs de décalage binaires
Ces opérations permettent de décaler les bits de la représentation binaire de l'opérande.
Opérateurs binaires booléens
Les opérateurs binaires traitent leurs opérandes comme un ensemble de 32 bits (zéros et uns) et retournent des valeurs numériques standard en JavaScript.
Opérateurs logiques
Les opérateurs logiques manipulent des valeurs booléennes (logiques) et ont un comportement de court-circuit.
Opérateur conditionnel (ternaire)
(condition ? ifTrue : ifFalse)-
L'opérateur conditionnel retourne une valeur parmi deux selon la valeur logique de la condition portée par le premier opérande.
Opérateurs d'affectation
Un opérateur d'affectation permet d'affecter une valeur à son opérande gauche en fonction de la valeur de son opérande droit.
=-
L'opérateur d'affectation.
*=-
L'opérateur de multiplication et d'affectation.
/=-
L'opérateur de division et d'affectation.
%=-
L'opérateur de reste et d'affectation.
+=-
L'opérateur d'addition et d'affectation.
-=-
L'opérateur de soustraction et d'affectation.
<<=-
L'opérateur de décalage binaire à gauche et d'affectation.
>>=-
L'opérateur de décalage binaire à droite et d'affectation.
>>>=-
L'opérateur de décalage binaire à droite non signé et d'affectation.
&=-
L'opérateur ET/AND binaire et d'affectation.
^=-
L'opérateur OU exclusif/XOR binaire et d'affectation.
|=-
L'opérateur OU/OR binaire et d'affectation.
**=-
L'opérateur d'exponentiation et d'affectation.
&&=-
L'opérateur ET/AND logique et d'affectation.
||=-
L'opérateur OU/OR logique et d'affectation.
??=-
L'opérateur de coalescence des nuls et d'affectation.
[a, b] = arr,{ a, b } = obj-
L'affectation par déstructuration permet d'assigner les propriétés d'un tableau ou d'un objet à des variables en utilisant une syntaxe qui ressemble à celle des littéraux de tableau ou d'objet.
Les opérateurs de générateur
La syntaxe de propagation
...obj-
La syntaxe de propagation permet à un itérable, tel qu'un tableau ou une chaîne de caractères, d'être développé dans des endroits où zéro ou plusieurs arguments (pour les appels de fonction) ou éléments (pour les littéraux de tableau) sont attendus. Dans un littéral d'objet, la syntaxe de propagation énumère les propriétés d'un objet et ajoute les paires clé-valeur à l'objet en cours de création.
Opérateur virgule
,-
L'opérateur virgule permet d'évaluer plusieurs expressions dans une seule instruction et retourne le résultat de la dernière expression.
Que sont les opérateurs ?
Comme l'explique la section Que sont les instructions, les déclarations et les expressions ?, une expression est un élément fondamental qui s'évalue en une valeur. Les instructions, les déclarations et les expressions peuvent toutes définir des emplacements précis où les expressions sont acceptées. Lorsqu'une expression contient des emplacements pour d'autres expressions imbriquées, les parties qui ne sont pas des emplacements sont appelées des opérateurs.
Par exemple, la syntaxe d'une expression appelée addition est expression + expression (si vous consultez la spécification, les opérandes sont appelés expression additive et expression multiplicative, qui sont tous deux des sous-ensembles d'expression, mais il s'agit du mécanisme de la spécification pour définir la priorité et l'associativité, ce qui ne concerne pas notre propos). En dehors des deux emplacements d'expression, l'entité de code introduite est simplement + : le terme opérateur d'addition. De même, la syntaxe de l'expression de production est yield expression, donc yield est appelé l'opérateur. Autrement dit, chaque opérateur correspond à une expression.
MDN considère également les expressions sans emplacements, comme null, comme des opérateurs selon la définition ci-dessus, bien que nous les appelions presque toujours « syntaxe » ou « expression ».
Une expression n'a pas besoin de prendre un nombre fixe d'emplacements. Par exemple, l'expression littérale de tableau [expression, expression, expression] peut prendre un nombre arbitraire d'emplacements d'expression. La partie [,,] peut être appelée un « opérateur ». Le MDN évite cet usage, mais vous pouvez le rencontrer dans des langages de programmation fonctionnelle comme Haskell (angl.).
La définition des opérateurs devient moins précise avec certaines autres entités de code : que se passe-t-il si une expression possède un emplacement qui n'est pas une expression, ou si une entité de code combinée à une expression ne forme pas une expression ? Appelons-nous tout de même cette entité de code un opérateur ?
- Dans l'expression du chaînage optionnel
toto?.truc,totoest une expression, maistrucdoit être un identifiant et ne s'évalue pas en une valeur. Considérons-nous toujours?.comme un opérateur ? - Dans l'expression de la fonction fléchée
arg => body,bodypeut être une expression (bien qu'il puisse également s'agir d'un corps de bloc), etargest simplement une liste d'arguments. Considérons-nous toujours=>comme un opérateur ? - Dans la syntaxe de propagation
...toto,totoest une expression, mais l'ensemble n'est pas une expression, car il ne s'évalue pas en une valeur — il n'a de sens que dans certaines autres expressions comme les appels de fonction, les littéraux de tableau et les littéraux d'objet. Considérons-nous toujours...comme un opérateur ?
Le terme « opérateur » n'est pas défini avec précision en JavaScript, donc MDN ne donne pas de réponse définitive. Nous regroupons toutes ces constructions sous « Opérateurs », mais nous évitons de les désigner officiellement comme des opérateurs. De nombreux concepts utiles concernant les opérateurs, comme la priorité, s'appliquent tout de même à ces constructions, quelle que soit leur nature exacte.