Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Array[Symbol.species]
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Januar 2020.
Die statische ZugriffseigenschaftArray[Symbol.species] gibt den Konstruktor zurück, der verwendet wird, um Rückgabewerte von Array-Methoden zu konstruieren.
Warnung:Die Existenz von[Symbol.species] ermöglicht die Ausführung von beliebigem Code und kann Sicherheitslücken schaffen. Sie macht auch bestimmte Optimierungen deutlich schwieriger. Entwickler von Enginesuntersuchen, ob dieses Feature entfernt werden soll. Vermeiden Sie es nach Möglichkeit, darauf zu vertrauen. Moderne Array-Methoden, wie etwatoReversed(), verwenden[Symbol.species] nicht und geben immer eine neueArray-Basisklasseninstanz zurück.
In diesem Artikel
Syntax
Array[Symbol.species]Rückgabewert
Der Wert des Konstruktors (this), auf demget [Symbol.species] aufgerufen wurde. Der Rückgabewert wird verwendet, um Rückgabewerte von Array-Methoden zu konstruieren, die neue Arrays erstellen.
Beschreibung
Die Zugriffseigenschaft[Symbol.species] gibt den Standardkonstruktor fürArray-Objekte zurück. Unterklassen-Konstruktoren können sie überschreiben, um die Konstruktorzuweisung zu ändern. Die Standardimplementierung ist im Wesentlichen:
// Hypothetical underlying implementation for illustrationclass Array { static get [Symbol.species]() { return this; }}Aufgrund dieser polymorphen Implementierung würde[Symbol.species] von abgeleiteten Unterklassen standardmäßig auch den Konstruktor selbst zurückgeben.
class SubArray extends Array {}SubArray[Symbol.species] === SubArray; // trueBeim Aufrufen von Array-Methoden, die das bestehende Array nicht verändern, sondern eine neue Array-Instanz zurückgeben (zum Beispielfilter() undmap()), wird derconstructor[Symbol.species] des Arrays aufgerufen. Der zurückgegebene Konstruktor wird verwendet, um den Rückgabewert der Array-Methode zu konstruieren. Dies macht es technisch möglich, dass Array-Methoden Objekte zurückgeben, die nicht mit Arrays in Verbindung stehen.
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 }Beispiele
>Species in gewöhnlichen Objekten
Die Eigenschaft[Symbol.species] gibt die Standardkonstruktorfunktion zurück, die derArray-Konstruktor fürArray ist.
Array[Symbol.species]; // [Function: Array]Species in abgeleiteten Objekten
In einer Instanz einer benutzerdefiniertenArray-Unterklasse, wieMyArray, ist dieMyArray-Species derMyArray-Konstruktor. Es könnte jedoch gewünscht sein, dies zu überschreiben, um Eltern-Array-Objekte in Ihren abgeleiteten Klassenmethoden zurückzugeben:
class MyArray extends Array { // Overwrite MyArray species to the parent Array constructor static get [Symbol.species]() { return Array; }}Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-get-array-%symbol.species%> |