Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Array : accesseur statique [Symbol.species]
Baseline Widely available
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 propriété accesseur statiqueArray[Symbol.species] retourne le constructeur utilisé pour créer les valeurs de retour des méthodes des tableaux.
Attention :La présence de[Symbol.species] permet l'exécution de code arbitraire et peut créer des failles de sécurité. Elle complique également certaines optimisations. Les responsables des moteurs JavaScriptétudient la suppression de cette fonctionnalité(angl.). Évitez d'y recourir si possible. Les méthodes modernes des tableaux, commetoReversed(), n'utilisent pas[Symbol.species] et retournent toujours une nouvelle instance de la classe de baseArray.
Dans cet article
Syntaxe
Array[Symbol.species]Valeur de retour
La valeur du constructeur (this) sur lequelget [Symbol.species] a été appelé. Cette valeur est utilisée pour construire les valeurs de retour des méthodes de tableau qui créent de nouveaux tableaux.
Description
La propriété accesseur[Symbol.species] retourne le constructeur par défaut pour les objetsArray. Les constructeurs des sous-classes peuvent la surcharger pour modifier l'affectation du constructeur. L'implémentation par défaut est essentiellement :
// Implémentation sous-jacente hypothétique à titre d'illustrationclass Array { static get [Symbol.species]() { return this; }}En raison de cette implémentation polymorphe,[Symbol.species] des sous-classes dérivées retournera également par défaut le constructeur lui-même.
class SubArray extends Array {}SubArray[Symbol.species] === SubArray; // trueLorsque vous appelez des méthodes de tableau qui ne modifient pas le tableau existant mais retournent une nouvelle instance de tableau (par exemple,filter() etmap()), leconstructor[Symbol.species] du tableau sera utilisé. Le constructeur retourné servira à construire la valeur de retour de la méthode de tableau. Cela rend techniquement possible de faire retourner par les méthodes 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 }Exemples
>Species dans les objets ordinaires
La propriété[Symbol.species] retourne la fonction constructeur par défaut, qui est le constructeurArray pourArray.
Array[Symbol.species]; // [Function: Array]Species dans les objets dérivés
Dans une instance d'une sous-classe personnalisée deArray, commeMyArray, le species deMyArray est le constructeurMyArray. Cependant, vous pouvez vouloir le redéfinir afin de retourner des objetsArray parents dans les méthodes de votre classe dérivée :
class MyArray extends Array { // Redéfinit le species de MyArrayArray vers le constructeur parent Array static get [Symbol.species]() { return Array; }}Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-get-array-%symbol.species%> |