Symbol.isConcatSpreadable

Le symbole connu Symbol.isConcatSpreadable est utilisé pour configurer la façon dont un tableau est aplati lors d'une concaténation via la méthode Array.prototype.concat().

Exemple interactif

Description

Le symbole @@isConcatSpreadable (Symbol.isConcatSpreadable) peut être défini comme une propriété propre ou héritée. C'est une valeur booléenne qui contrôle le comportement des tableaux et des objets semblables à des tableaux :

  • Pour les tableaux, concat aplatira les tableaux par défaut. Symbol.isConcatSpreadable peut être utilisé pour obtenir le comportement opposé.
  • Pour les objets semblables à des tableaux, par défaut, il n'y aucune mise à plat. Symbol.isConcatSpreadable permet de forcer cette mise à plat.
Attributs de Symbol.isConcatSpreadable
Écrivable Non
Énumérable Non
Configurable Non

Exemples

Tableaux (Array)

Par défaut, Array.prototype.concat() aplatit les tableaux pour le résultat de la concaténation :

js
var alpha = ["a", "b", "c"],
  numérique = [1, 2, 3];

var alphaNumérique = alpha.concat(numérique);

console.log(alphaNumérique);
// Résultat : ['a', 'b', 'c', 1, 2, 3]

En définissant Symbol.isConcatSpreadable avec false, on peut désactiver le comportement par défaut :

js
var alpha = ["a", "b", "c"],
  numérique = [1, 2, 3];

numérique[Symbol.isConcatSpreadable] = false;
var alphaNumérique = alpha.concat(numérique);

console.log(alphaNumérique);
// Résultat: ['a', 'b', 'c', [1, 2, 3] ]

Objets semblables à des tableaux

Pour les objets semblables à un tableau, par défaut, il n'y a pas de fusion. Il faut donc que Symbol.isConcatSpreadable vaille true pour aplatir le tableau :

js
var x = [1, 2, 3];

var fauxTableau = {
  [Symbol.isConcatSpreadable]: true,
  length: 2,
  0: "coucou",
  1: "monde",
};

x.concat(fauxTableau); // [1, 2, 3, "coucou", "monde"]

Note : La propriété length indique ici le nombre de propriétés à ajouter au tableau.

Spécifications

Specification
ECMAScript Language Specification
# sec-symbol.isconcatspreadable

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi