Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis octobre 2015.
La syntaxe de décomposition permet d'étendre un itérable (par exemple une expression de tableau ou une chaîne de caractères) en lieu et place de plusieurs arguments (pour les appels de fonctions) ou de plusieurs éléments (pour les littéraux de tableaux) ou de paires clés-valeurs (pour les littéraux d'objets).
Pour l'utilisation de la décomposition dans les appels de fonction :
Pour les littéraux de tableaux :
Pour les littéraux objets (nouvelle fonctionnalité pour ECMAScript, actuellement en proposition de niveau 4, finalisée) :
Il arrive souvent qu'on veuille utiliser Function.prototype.apply avec un tableau parmi les arguments de la fonction utilisée :
avec la décomposition, on peut désormais écrire :
Tout argument passé à une fonction peut être décomposé grâce à cette syntaxe et cette syntaxe peut être utilisée pour plusieurs arguments.
Avec ES5, il n'est pas possible d'utiliser new avec apply (selon ES5 apply effectue un appel [[Call]] et pas un appel [[Construct]]). Avec ES2015, la syntaxe de décomposition permet de le faire naturellement :
Afin d'utiliser new avec un tableau de paramètres, sans utiliser la décomposition, il faudrait l'employer indirectement grâce à une application partielle :
À l'heure actuelle, sans la décomposition, si on a un tableau et qu'on souhaite créer un nouveau tableau composé du premier, on ne peut pas utiliser un littéral de tableau et il faut utiliser des fonctions comme push(), splice(), concat(), etc. Avec la syntaxe de décomposition, cela devient plus succinct :
Comme pour les fonctions, la syntaxe peut être utilisé plusieurs fois.
Note : Lorsqu'on utilise la décomposition pour copier un tableau, celle-ci ne s'applique qu'au premier niveau de profondeur. Par conséquent, il peut ne pas convenir pour la copie des tableaux multidimensionnels (des tableaux imbriqués dans d'autres tableaux) comme le montre l'exemple suivant (il en va de même avec Object.assign() et la décomposition).
concat est souvent utilisé afin de concaténer un tableau à la suite d'une autre. Avec ES5, on aurait le code suivant :
Avec ES2015 et la décomposition, on peut écrire :
unshift est souvent utilisé afin d'insérer des valeurs d'un tableau au début d'un autre tableau. Avec ES5, on peut écrire :
Avec ES2015 et la décomposition, on peut écrire :
Note : Il y a une différence avec unshift() : ici, on crée un nouveau tableau qui est affecté à arr1, le tableau original de arr1 n'est pas modifié "sur place".
La proposition relative à la décomposition des propriétés (actuellement au stade de proposition de niveau 4) vise à ajouter la décomposition des propriétés pour les littéraux objets. Cela permet de copier les propriétés énumérables directement rattachées à un objet source sur un nouvel objet.
Le clonage superficiel (qui ne rattache pas le prototype) ou la fusion d'objets peut donc être obtenue avec une syntaxe plus concise que celle utilisant Object.assign().
On notera que Object.assign() déclenche les mutateurs, ce qui n'est pas le cas pour la syntaxe de décomposition.
Il n'est pas possible de remplacer ou de recopier le comportement de la fonction Object.assign() :
Dans l'exemple précédent, la syntaxe de décomposition ne fonctionne pas comme on pourrait s'y attendre : il décompose les arguments en un tableau grâce au paramètre du reste.
Pour rappel : la syntaxe de décomposition ne s'applique qu'aux objets itérables :
Lorsqu'on utilise la décomposition (comme dans les exemples précédents), il faut faire attention à ne pas dépasser le nombre maximal d'arguments du moteur JavaScript. En effet, la décomposition place toutes les valeurs sources dans la pile. Pour plus d'informations, consulter Function.prototype.apply.
La syntaxe des paramètres du reste ressemble à la syntaxe de décomposition mais est utilisée afin de destructurer des tableaux et des objets. D'une certaine façon, la syntaxe du reste est l'opposée de la décomposition : la première collecte plusieurs éléments et les condense en un seul élément tandis que la seconde explose les éléments. Pour plus d'informations, voir la page sur les paramètres du reste.
| ECMAScript® 2027 Language Specification # prod-SpreadElement |
| ECMAScript® 2027 Language Specification # prod-ArgumentList |
| ECMAScript® 2027 Language Specification # prod-PropertyDefinition |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 17 févr. 2025 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.