[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/Symbol.species [Back]  [Original]

Array : accesseur statique [Symbol.species] - JavaScript | MDN

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

Array : accesseur statique [Symbol.species]

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 janvier 2020.

La proprit accesseur statique Array[Symbol.species] retourne le constructeur utilis pour crer les valeurs de retour des mthodes des tableaux.

Attention : La prsence de [Symbol.species] permet l'excution de code arbitraire et peut crer des failles de scurit. Elle complique galement certaines optimisations. Les responsables des moteurs JavaScript tudient la suppression de cette fonctionnalit (angl.). vitez d'y recourir si possible. Les mthodes modernes des tableaux, comme toReversed(), n'utilisent pas [Symbol.species] et retournent toujours une nouvelle instance de la classe de base Array.

Dans cet article

Syntaxe

js
Array[Symbol.species]

Valeur de retour

La valeur du constructeur (this) sur lequel get [Symbol.species] a t appel. Cette valeur est utilise pour construire les valeurs de retour des mthodes de tableau qui crent de nouveaux tableaux.

Description

La proprit accesseur [Symbol.species] retourne le constructeur par dfaut pour les objets Array. Les constructeurs des sous-classes peuvent la surcharger pour modifier l'affectation du constructeur. L'implmentation par dfaut est essentiellement :

js
// Implmentation sous-jacente hypothtique  titre d'illustration
class Array {
  static get [Symbol.species]() {
    return this;
  }
}

En raison de cette implmentation polymorphe, [Symbol.species] des sous-classes drives retournera galement par dfaut le constructeur lui-mme.

js
class SubArray extends Array {}
SubArray[Symbol.species] === SubArray; // true

Lorsque vous appelez des mthodes de tableau qui ne modifient pas le tableau existant mais retournent une nouvelle instance de tableau (par exemple, filter() et map()), le constructor[Symbol.species] du tableau sera utilis. Le constructeur retourn servira construire la valeur de retour de la mthode de tableau. Cela rend techniquement possible de faire retourner par les mthodes de tableau des objets qui ne sont pas des tableaux.

js
class NotAnArray {
  constructor(length) {
    this.length = length;
  }
}

const arr = [0, 1, 2];
arr.constructor = { [Symbol.species]: NotAnArray };
arr.map((i) => i); // NotAnArray { '0': 0, '1': 1, '2': 2, length: 3 }
arr.filter((i) => i); // NotAnArray { '0': 1, '1': 2, length: 0 }
arr.concat([1, 2]); // NotAnArray { '0': 0, '1': 1, '2': 2, '3': 1, '4': 2, length: 5 }

Exemples

Species dans les objets ordinaires

La proprit [Symbol.species] retourne la fonction constructeur par dfaut, qui est le constructeur Array pour Array.

js
Array[Symbol.species]; // [Function: Array]

Species dans les objets drivs

Dans une instance d'une sous-classe personnalise de Array, comme MyArray, le species de MyArray est le constructeur MyArray. Cependant, vous pouvez vouloir le redfinir afin de retourner des objets Array parents dans les mthodes de votre classe drive :

js
class MyArray extends Array {
  // Redfinit le species de MyArrayArray vers le constructeur parent Array
  static get [Symbol.species]() {
    return Array;
  }
}

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-get-array-%symbol.species%

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page