Symbol.isConcatSpreadable

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.

Die statische Dateneigenschaft Symbol.isConcatSpreadable repräsentiert das bekannte Symbol Symbol.isConcatSpreadable. Die Methode Array.prototype.concat() überprüft dieses Symbol bei jedem Objekt, das zusammengeführt wird, um festzustellen, ob es als ein array-ähnliches Objekt behandelt und auf seine Array-Elemente abgeflacht werden sollte.

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 bekannte 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 verbreiten (zu flatten). Symbol.isConcatSpreadable kann in diesen Fällen das Flattening verhindern.
  • Für array-ähnliche Objekte ist das Standardverhalten kein Verbreiten oder Flattening. Symbol.isConcatSpreadable kann in diesen Fällen das Flattening erzwingen.

Beispiele

Arrays

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

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, können Sie das Standardverhalten deaktivieren:

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 verbreiten. 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 Objekteigenschaften zu steuern, die hinzugefügt werden sollen. Im obigen Beispiel gibt length:2 an, dass zwei Eigenschaften hinzugefügt werden müssen.

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-symbol.isconcatspreadable

Browser-Kompatibilität

Siehe auch