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 bekannte Symbol Symbol.isConcatSpreadable. Die Methode Array.prototype.concat() prüft dieses Symbol bei jedem zu verkettenden Objekt, um festzustellen, ob es als Array-ähnliches Objekt behandelt und seine Elemente in das Ergebnis eingefügt werden sollen.
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 | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | nein |
Beschreibung
Die Eigenschaft [Symbol.isConcatSpreadable] kann als eigene oder geerbte Eigenschaft definiert werden. Ihr Wert ist ein boolescher Wert. Sie kann das Verhalten von Arrays und Array-ähnlichen Objekten steuern:
- Bei Arrays werden die Elemente standardmäßig einzeln in das Ergebnis eingefügt.
Symbol.isConcatSpreadablekann dieses Verhalten verhindern. - Bei Array-ähnlichen Objekten werden die Elemente standardmäßig nicht einzeln eingefügt.
Symbol.isConcatSpreadablekann dieses Verhalten erzwingen.
Beispiele
>Arrays
Standardmäßig fügt Array.prototype.concat() die Elemente von Arrays einzeln in das Ergebnis ein:
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 Sie Symbol.isConcatSpreadable auf false setzen, können Sie dieses Standardverhalten deaktivieren:
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
Array-ähnliche Objekte werden standardmäßig nicht aufgelöst. Um ihre Elemente einzeln in das Ergebnis einzufügen, muss Symbol.isConcatSpreadable auf true gesetzt werden:
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 Eigenschaft length steuert, wie viele Eigenschaften des Objekts hinzugefügt werden. Im obigen Beispiel gibt length:2 an, dass zwei Eigenschaften hinzugefügt werden.
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.isconcatspreadable> |