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 | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | nein |
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.isConcatSpreadablekann das Abflachen in diesen Fällen verhindern. - Für array-ähnliche Objekte ist das Standardverhalten, nicht zu spreaden oder abzuflachen.
Symbol.isConcatSpreadablekann in diesen Fällen das Abflachen erzwingen.
Beispiele
>Arrays
Standardmäßig spreadet (flacht) Array.prototype.concat() Arrays in seinem Ergebnis ab:
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:
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:
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> |