Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Référence
  4. Objets natifs standards
  5. Array
  6. [Symbol.species]

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 EnglishAlways switch to English

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.

Syntaxe

js
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 :

js
// 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.

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

Lorsque 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.

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 propriété[Symbol.species] retourne la fonction constructeur par défaut, qui est le constructeurArray pourArray.

js
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 :

js
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%

Compatibilité des navigateurs

Voir aussi

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2025 Movatter.jp