TypedArray[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 September 2016.
Die statische Accessor-Eigenschaft TypedArray[Symbol.species] gibt den Konstruktor zurück, der verwendet wird, um Rückgabewerte von Methoden des typisierten Arrays zu konstruieren.
Warnung:
Die Existenz von [Symbol.species] ermöglicht die Ausführung von beliebigem Code und kann Sicherheitslücken schaffen. Außerdem erschwert es bestimmte Optimierungen erheblich. Entwickler von Engines untersuchen, ob dieses Feature entfernt werden sollte. Vermeiden Sie, sich darauf zu verlassen, wenn möglich.
Syntax
TypedArray[Symbol.species]
Rückgabewert
Der Wert des Konstruktors (this), auf dem get [Symbol.species] aufgerufen wurde. Der Rückgabewert wird verwendet, um Rückgabewerte von Methoden des typisierten Arrays zu konstruieren, die neue typisierte Arrays erstellen.
Beschreibung
Die Accessor-Eigenschaft [Symbol.species] gibt den Standardkonstruktor für typisierte Array-Objekte zurück. Konstruktoren von Unterklassen können diese überschreiben, um die Konstruktorzuweisung zu ändern. Die Standardimplementierung ist im Wesentlichen:
// Hypothetical underlying implementation for illustration
class TypedArray {
static get [Symbol.species]() {
return this;
}
}
Aufgrund dieser polymorphen Implementierung würde [Symbol.species] abgeleiteter Unterklassen standardmäßig auch den Konstruktor selbst zurückgeben.
class SubTypedArray extends Int8Array {}
SubTypedArray[Symbol.species] === SubTypedArray; // true
Beim Aufrufen von Methoden des typisierten Arrays, die das vorhandene Array nicht ändern, sondern eine neue Array-Instanz zurückgeben (zum Beispiel filter() und map()), wird der constructor[Symbol.species] des Arrays aufgerufen. Der zurückgegebene Konstruktor wird verwendet, um den Rückgabewert der Methode des typisierten Arrays zu konstruieren.
Anders als bei Array[Symbol.species] stellt die Sprache jedoch sicher, dass das neu erstellte Array ein korrektes typisiertes Array ist und denselben Inhaltstyp wie das Originalarray hat, wenn [Symbol.species] zum Erstellen neuer typisierter Arrays verwendet wird — zum Beispiel können Sie kein BigInt64Array aus einem Float64Array erstellen oder ein nicht-BigInt-Array aus einem BigInt-Array. Dies würde einen TypeError auslösen.
class BadArray extends Int8Array {
static get [Symbol.species]() {
return Array;
}
}
new BadArray(1).map(() => 0); // TypeError: Method %TypedArray%.prototype.map called on incompatible receiver [object Array]
class BadArray2 extends Int8Array {
static get [Symbol.species]() {
return BigInt64Array;
}
}
new BadArray2(1).map(() => 0n); // TypeError: TypedArray.prototype.map constructed typed array of different content type from |this|
Hinweis:
Aufgrund eines Bugs in sowohl SpiderMonkey als auch V8 wird der Inhaltstyp-Abgleich nicht überprüft. Nur Safari wird im zweiten Beispiel einen TypeError auslösen.
Beispiele
>Species in gewöhnlichen Objekten
Die Eigenschaft [Symbol.species] gibt die Standardkonstruktorfunktion zurück, die für einen gegebenen typisierten Array-Konstruktor eine der Konstruktoren des typisierten Arrays selbst ist.
Int8Array[Symbol.species]; // function Int8Array()
Uint8Array[Symbol.species]; // function Uint8Array()
Float32Array[Symbol.species]; // function Float32Array()
Species in abgeleiteten Objekten
In einer Instanz einer benutzerdefinierten TypedArray-Unterklasse, wie etwa MyTypedArray, ist die MyTypedArray-Spezies der MyTypedArray-Konstruktor. Sie möchten jedoch möglicherweise dies überschreiben, um in Ihren abgeleiteten Klassenmethoden ein übergeordnetes typisiertes Array-Objekt zurückzugeben:
class MyTypedArray extends Uint8Array {
// Overwrite MyTypedArray species to the parent Uint8Array constructor
static get [Symbol.species]() {
return Uint8Array;
}
}
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-get-%typedarray%-%symbol.species%> |