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

View in English Always switch to English

Symbol.isConcatSpreadable

Baseline Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit April 2017 browserübergreifend verfügbar.

Die statische Dateneigenschaft Symbol.isConcatSpreadable repräsentiert das wohlbekannte Symbol Symbol.isConcatSpreadable. Die Methode Array.prototype.concat() prüft dieses Symbol für jedes Objekt, das zusammengefügt wird, um festzustellen, ob es als array-ähnliches Objekt behandelt und auf seine Array-Elemente abgeflacht werden soll.

Probieren Sie es aus

const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];
let alphaNumeric = alpha.concat(numeric);

console.log(alphaNumeric);
// Expected output: Array ["a", "b", "c", 1, 2, 3]

numeric[Symbol.isConcatSpreadable] = false;
alphaNumeric = alpha.concat(numeric);

console.log(alphaNumeric);
// Expected output: Array ["a", "b", "c", Array [1, 2, 3]]

Wert

Das wohlbekannte Symbol Symbol.isConcatSpreadable.

Eigenschaften von Symbol.isConcatSpreadable
Schreibbarnein
Aufzählbarnein
Konfigurierbarnein

Beschreibung

Die Eigenschaft [Symbol.isConcatSpreadable] kann als eigene oder geerbte Eigenschaft definiert werden und ihr Wert ist ein boolescher Wert. Sie kann das Verhalten für Arrays und array-ähnliche Objekte steuern:

  • Für Array-Objekte ist das Standardverhalten, Elemente zu spreaden (abzuflachen). Symbol.isConcatSpreadable kann das Abflachen in diesen Fällen verhindern.
  • Für array-ähnliche Objekte ist das Standardverhalten, nicht zu spreaden oder abzuflachen. Symbol.isConcatSpreadable kann in diesen Fällen das Abflachen erzwingen.

Beispiele

Arrays

Standardmäßig spreadet (flacht) Array.prototype.concat() Arrays in seinem Ergebnis ab:

js
const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];

const alphaNumeric = alpha.concat(numeric);

console.log(alphaNumeric); // Result: ['a', 'b', 'c', 1, 2, 3]

Wenn Symbol.isConcatSpreadable auf false gesetzt wird, kann das Standardverhalten deaktiviert werden:

js
const alpha = ["a", "b", "c"];
const numeric = [1, 2, 3];

numeric[Symbol.isConcatSpreadable] = false;
const alphaNumeric = alpha.concat(numeric);

console.log(alphaNumeric); // Result: ['a', 'b', 'c', [1, 2, 3] ]

Array-ähnliche Objekte

Für array-ähnliche Objekte ist es Standard, nicht zu spreaden. Symbol.isConcatSpreadable muss auf true gesetzt werden, um ein abgeflachtes Array zu erhalten:

js
const x = [1, 2, 3];

const fakeArray = {
  [Symbol.isConcatSpreadable]: true,
  length: 2,
  0: "hello",
  1: "world",
};

x.concat(fakeArray); // [1, 2, 3, "hello", "world"]

Hinweis: Die length-Eigenschaft wird verwendet, um die Anzahl der hinzuzufügenden Objekteigenschaften zu steuern. Im obigen Beispiel zeigt length:2 an, dass zwei Eigenschaften hinzugefügt werden müssen.

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-symbol.isconcatspreadable

Browser-Kompatibilität

Siehe auch