Array.prototype[Symbol.unscopables]
Deprecated
Avoid using this feature in new projects.
JavaScript strict mode prohibits the with statement.
This feature may be a candidate for removal from web standards or browsers.>
Consider using the following features instead: Destructuring.>
Die Dateneigenschaft [Symbol.unscopables] von Array.prototype wird von allen Array-Instanzen gemeinsam genutzt. Sie enthält Eigenschaftsnamen, die vor ES2015 nicht im ECMAScript-Standard enthalten waren und bei der Namensauflösung innerhalb einer with-Anweisung ignoriert werden.
Wert
Ein Objekt mit null-Prototyp, das die unten aufgeführten Eigenschaftsnamen enthält, deren Werte auf true gesetzt sind.
Eigenschaften von Array.prototype[Symbol.unscopables] | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | ja |
Beschreibung
Die folgenden standardmäßigen Array-Eigenschaften werden bei der Namensauflösung innerhalb einer with-Anweisung ignoriert:
at()copyWithin()entries()fill()find()findIndex()findLast()findLastIndex()flat()flatMap()includes()keys()toReversed()toSorted()toSpliced()values()
Array.prototype[Symbol.unscopables] ist ein ansonsten leeres Objekt, das lediglich alle oben genannten Eigenschaftsnamen mit dem Wert true enthält. Sein Prototyp ist null. Dadurch werden Eigenschaften von Object.prototype wie toString nicht versehentlich von der Namensauflösung ausgeschlossen, und ein toString() innerhalb der with-Anweisung wird weiterhin auf dem Array aufgerufen.
Unter Symbol.unscopables erfahren Sie, wie Sie Eigenschaften Ihrer eigenen Objekte von der Namensauflösung ausschließen.
Beispiele
Stellen Sie sich vor, der folgende Aufruf values.push('something') stünde in Code, der vor ECMAScript 2015 geschrieben wurde.
var values = [];
with (values) {
values.push("something");
}
Als ECMAScript 2015 die Methode Array.prototype.values() einführte, begann die with-Anweisung im obigen Code, values als Array-Methode values.values statt als externe Variable values zu interpretieren. Der Aufruf values.push('something') würde dadurch nicht mehr funktionieren, da nun auf push der Methode values.values zugegriffen wird. Dies führte zu einer Fehlermeldung an Firefox (Firefox-Bug 883914).
Die Dateneigenschaft [Symbol.unscopables] von Array.prototype bewirkt daher, dass die in ECMAScript 2015 eingeführten Array-Eigenschaften bei der Namensauflösung innerhalb einer with-Anweisung ignoriert werden. So kann Code, der vor ECMAScript 2015 geschrieben wurde, weiterhin wie erwartet funktionieren.
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype-%symbol.unscopables%> |