Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

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é this fait 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é function définit une expression de fonction.

class

Le mot-clé class dé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 function dé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.property et object["property"]).

?.

L'opérateur de chaînage optionnel retourne undefined au lieu de provoquer une erreur si une référence est &équivalent à nulle (null ou undefined).

new

L'opérateur new crée une instance d'un constructeur.

new.target

Dans les constructeur, new.target fait référence au constructeur qui est invoqué par new.

import.meta

Un objet exposant des métadonnées spécifiques au contexte à un module JavaScript.

super

Le mot-clé super appelle 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.

A++

L'opérateur d'incrémentation suffixe.

A--

L'opérateur de décrémentation suffixe.

++A

L'opérateur d'incrémentation préfixe.

--A

L'opérateur de décrémentation préfixe.

Opérateurs unaires

Une opération unaire est une opération qui ne manipule qu'un seul opérande.

delete

L'opérateur delete supprime une propriété dans un objet.

void

L'opérateur void évalue une expression et ignore sa valeur de retour.

typeof

L'opérateur typeof dé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.

**

L'opérateur d'exponentiation.

*

L'opérateur de multiplication.

/

L'opérateur de division.

%

L'opérateur de reste.

+ (Plus)

L'opérateur d'addition.

-

L'opérateur de soustraction.

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 instanceof détermine si un objet est une instance d'un autre objet.

in

L'opérateur in dé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.

==

L'opérateur d'égalité.

!=

L'opérateur d'inégalité.

===

L'opérateur d'égalité stricte.

!==

L'opérateur d'inégalité stricte.

Opérateurs de décalage binaires

Ces opérations permettent de décaler les bits de la représentation binaire de l'opérande.

<<

L'opérateur de décalage binaire à gauche.

>>

L'opérateur de décalage binaire à droite.

>>>

L'opérateur de décalage binaire à droite non signé.

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.

&

ET/AND binaire.

|

OU/OR binaire.

^

OU exclusif/XOR binaire.

Opérateurs logiques

Les opérateurs logiques manipulent des valeurs booléennes (logiques) et ont un comportement de court-circuit.

&&

ET/AND logique.

||

OU/OR logique.

??

L'opérateur de coalescence des nuls.

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

yield

Met en pause et reprend une fonction génératrice.

yield*

Délègue à une autre fonction génératrice ou à un objet itérable.

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, toto est une expression, mais truc doit ê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, body peut être une expression (bien qu'il puisse également s'agir d'un corps de bloc), et arg est simplement une liste d'arguments. Considérons-nous toujours => comme un opérateur ?
  • Dans la syntaxe de propagation ...toto, toto est 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.

Spécifications

Spécification
ECMAScript® 2027 Language Specification
# prod-LogicalORExpression
ECMAScript® 2027 Language Specification
# prod-PropertyDefinition
ECMAScript® 2027 Language Specification
# sec-assignment-operators
ECMAScript® 2027 Language Specification
# sec-relational-operators
ECMAScript® 2027 Language Specification
# sec-multiplicative-operators
ECMAScript® 2027 Language Specification
# sec-equality-operators
ECMAScript® 2027 Language Specification
# sec-super-keyword
ECMAScript® 2027 Language Specification
# sec-generator-function-definitions-runtime-semantics-evaluation
ECMAScript® 2027 Language Specification
# sec-unsigned-right-shift-operator
ECMAScript® 2027 Language Specification
# sec-exp-operator
ECMAScript® 2027 Language Specification
# sec-class-definitions
ECMAScript® 2027 Language Specification
# sec-grouping-operator
ECMAScript® 2027 Language Specification
# prod-SpreadElement
ECMAScript® 2027 Language Specification
# prod-ArgumentList
ECMAScript® 2027 Language Specification
# prod-BitwiseANDExpression
ECMAScript® 2027 Language Specification
# sec-subtraction-operator-minus
ECMAScript® 2027 Language Specification
# prod-AssignmentRestProperty
ECMAScript® 2027 Language Specification
# sec-new-operator
ECMAScript® 2027 Language Specification
# sec-addition-operator-plus
ECMAScript® 2027 Language Specification
# prod-CoalesceExpression
ECMAScript® 2027 Language Specification
# sec-signed-right-shift-operator
ECMAScript® 2027 Language Specification
# sec-bitwise-not-operator
ECMAScript® 2027 Language Specification
# sec-import-calls
ECMAScript® 2027 Language Specification
# sec-async-generator-function-definitions
ECMAScript® 2027 Language Specification
# sec-unary-minus-operator
ECMAScript® 2027 Language Specification
# sec-void-operator
ECMAScript® 2027 Language Specification
# sec-destructuring-assignment
ECMAScript® 2027 Language Specification
# prod-OptionalExpression
ECMAScript® 2027 Language Specification
# sec-unary-plus-operator
ECMAScript® 2027 Language Specification
# prod-LogicalANDExpression
ECMAScript® 2027 Language Specification
# sec-async-function-definitions
ECMAScript® 2027 Language Specification
# sec-generator-function-definitions
ECMAScript® 2027 Language Specification
# sec-built-in-function-objects
ECMAScript® 2027 Language Specification
# prod-AssignmentRestElement
ECMAScript® 2027 Language Specification
# prod-BitwiseORExpression
ECMAScript® 2027 Language Specification
# sec-logical-not-operator
ECMAScript® 2027 Language Specification
# sec-property-accessors
ECMAScript® 2027 Language Specification
# sec-comma-operator
ECMAScript® 2027 Language Specification
# sec-this-keyword
ECMAScript® 2027 Language Specification
# prod-FormalParameters
ECMAScript® 2027 Language Specification
# sec-object-initializer
ECMAScript® 2027 Language Specification
# sec-destructuring-binding-patterns
ECMAScript® 2027 Language Specification
# prod-MethodDefinition
ECMAScript® 2027 Language Specification
# sec-left-shift-operator
ECMAScript® 2027 Language Specification
# sec-postfix-increment-operator
ECMAScript® 2027 Language Specification
# prod-YieldExpression
ECMAScript® 2027 Language Specification
# sec-typeof-operator
ECMAScript® 2027 Language Specification
# prod-ImportMeta
ECMAScript® 2027 Language Specification
# sec-delete-operator
ECMAScript® 2027 Language Specification
# prod-ComputedPropertyName
ECMAScript® 2027 Language Specification
# sec-conditional-operator
ECMAScript® 2027 Language Specification
# sec-null-value
ECMAScript® 2027 Language Specification
# sec-postfix-decrement-operator
ECMAScript® 2027 Language Specification
# sec-function-definitions
ECMAScript® 2027 Language Specification
# prod-BitwiseXORExpression
HTML
# integration-with-the-javascript-module-system
HTML
# import-meta-resolve

Compatibilité des navigateurs

Voir aussi