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

Addition (+)

Baseline
Large disponibilité

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

L'opérateur d'addition (+) produit la somme de deux opérandes numériques ou la concaténation de deux chaînes de caractères.

Exemple interactif

console.log(2 + 2);
// Résultat attendu : 4

console.log(2 + true);
// Résultat attendu : 3

console.log("bonjour " + "à tous");
// Résultat attendu : "bonjour à tous"

console.log(2001 + " : L'Odyssée de l'espace");
// Résultat attendu : "2001 : L'Odyssée de l'espace"

Syntaxe

js
x + y

Description

L'opérateur + est surchargé pour deux opérations distinctes : l'addition numérique et la concaténation de chaînes de caractères. Lors de l'évaluation, il convertit d'abord les deux opérandes en valeurs primitives. Ensuite, les types des deux opérandes sont testés :

  • Si l'un des côtés est une chaîne de caractères, l'autre opérande est également converti en chaîne de caractères, puis les deux chaînes de caractères sont concaténées.
  • Si les deux opérandes sont des grands entiers, une addition de grands entiers est effectuée. Si l'un des côtés est un grand entier, mais pas l'autre, une exception TypeError est levée.
  • Sinon, les deux côtés sont convertis en nombres, puis une addition numérique est effectuée.

La concaténation de chaînes de caractères est souvent considérée comme équivalente aux littéraux gabarits ou à String.prototype.concat(), mais ce n'est pas le cas. L'addition convertit l'expression sous contrainte en une valeur primitive, ce qui appelle valueOf() en priorité ; en revanche, les littéraux gabarits et concat() convertissent l'expression sous contrainte en une chaîne de caractères, ce qui appelle toString() en priorité. Si l'expression possède une méthode [Symbol.toPrimitive](), la concaténation de chaînes de caractères l'appelle avec "default" comme indication, tandis que les littéraux gabarits utilisent "string". Ce point est important pour les objets qui possèdent des représentations différentes sous forme de chaîne de caractères et de valeur primitive — comme Temporal, dont les méthodes valueOf() des objets lèvent toutes une exception.

js
const t = Temporal.Now.instant();
"" + t; // Throws TypeError
`${t}`; // '2022-07-31T04:48:56.113918308Z'
"".concat(t); // '2022-07-31T04:48:56.113918308Z'

Il est déconseillé d'utiliser "" + x pour effectuer une conversion en chaîne de caractères.

Exemples

Additionner des nombres

js
1 + 2; // 3

Les autres valeurs qui ne sont pas des chaînes de caractères, pas des grands entiers sont converties en nombres :

js
true + 1; // 2
false + false; // 0

Additionner des grands entiers

js
1n + 2n; // 3n

Vous ne pouvez pas mélanger des opérandes de type BigInt et number lors de l'addition. null, undefined et les valeurs booléennes sont converties en nombres et sont également interdites.

js
1n + 2; // TypeError: Cannot mix BigInt and other types, use explicit conversions
2 + 1n; // TypeError: Cannot mix BigInt and other types, use explicit conversions

Les chaînes de caractères ont la priorité sur les autres types, donc ajouter une chaîne de caractères à un BigInt produit une concaténation de chaînes de caractères plutôt qu'une TypeError.

js
"1" + 2n; // "12"

Pour effectuer une addition avec un BigInt et un non-BigInt, convertissez l'un des opérandes :

js
1n + BigInt(2); // 3n
Number(1n) + 2; // 3

Additionner des chaînes de caractères

Si l'un des opérandes est une chaîne de caractères, l'autre est converti en chaîne de caractères et ils sont concaténés :

js
"toto" + "truc"; // "tototruc"
5 + "toto"; // "5toto"
"toto" + false; // "totofalse"
"2" + 2; // "22"

Spécifications

Spécification
ECMAScript® 2027 Language Specification
# sec-addition-operator-plus

Compatibilité des navigateurs

Voir aussi