| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/Symbol.species | [Back] [Original] |
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 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.
Array[Symbol.species]
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.
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 :
// 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.
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.
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 }
Species dans les objets ordinairesLa proprit [Symbol.species] retourne la fonction constructeur par dfaut, qui est le constructeur Array pour Array.
Array[Symbol.species]; // [Function: Array]
Species dans les objets drivsDans 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 :
class MyArray extends Array {
// Redfinit le species de MyArrayArray vers le constructeur parent Array
static get [Symbol.species]() {
return Array;
}
}
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-get-array-%symbol.species% |
ArraySymbol.speciesArray[Symbol.species] et prise en charge de [Symbol.species] dans toutes les mthodes concernes de Array dans core-js (angl.)Cette page a t modifie le 1 sept. 2026 par les contributeurices du MDN.
Arrayat()concat()copyWithin()entries()every()fill()filter()find()findIndex()findLast()findLastIndex()flat()flatMap()forEach()includes()indexOf()join()keys()lastIndexOf()map()pop()push()reduce()reduceRight()reverse()shift()slice()some()sort()splice()toLocaleString()toReversed()toSorted()toSpliced()toString()unshift()values()with()[Symbol.iterator]()Object/FunctionCertaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |