Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. Array
  6. [Symbol.species]

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

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.

Syntax

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

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

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

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

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 }

Beispiele

Species in gewöhnlichen Objekten

Die Eigenschaft[Symbol.species] gibt die Standardkonstruktorfunktion zurück, die derArray-Konstruktor fürArray ist.

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

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

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp