Array.prototype[Symbol.unscopables]
Die [Symbol.unscopables]
Daten-Eigenschaft von Array.prototype
wird von allen Array
-Instanzen geteilt. Sie enthält Eigenschaftsnamen, die vor der ES2015-Version nicht im ECMAScript-Standard enthalten waren und für Bindungszwecke der with
-Anweisung ignoriert werden.
Wert
Ein null
-Prototyp-Objekt mit den unten angegebenen Eigenschaftsnamen und deren Werten auf true
gesetzt.
Eigenschaften von Array.prototype[Symbol.unscopables] | |
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | ja |
Beschreibung
Die Standard-Array
-Eigenschaften, die für Bindungszwecke der with
-Anweisung ignoriert werden, sind:
at()
copyWithin()
entries()
fill()
find()
findIndex()
findLast()
findLastIndex()
flat()
flatMap()
includes()
keys()
toReversed()
toSorted()
toSpliced()
values()
Array.prototype[Symbol.unscopables]
ist ein leeres Objekt, das nur alle oben genannten Eigenschaftsnamen mit dem Wert true
enthält. Sein Prototyp ist null
, sodass Object.prototype
-Eigenschaften wie toString
nicht versehentlich unfähig gemacht werden und ein toString()
innerhalb der with
-Anweisung weiterhin auf dem Array aufgerufen wird.
Siehe Symbol.unscopables
, um zu erfahren, wie Sie unsichtbare Eigenschaften für Ihre eigenen Objekte festlegen können.
Beispiele
Stellen Sie sich vor, dass der values.push('etwas')
-Aufruf im folgenden Code geschrieben wurde, bevor ECMAScript 2015 eingeführt 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 die values.values
-Array-Methode statt als die externe values
-Variable zu interpretieren. Der Aufruf von values.push('etwas')
würde fehlschlagen, da er jetzt auf push
auf die values.values
-Methode zugreift. Dies führte zu einem gemeldeten Fehler in Firefox (Firefox Bug 883914).
Daher bewirkt die [Symbol.unscopables]
Daten-Eigenschaft für Array.prototype
, dass die mit ECMAScript 2015 eingeführten Array
-Eigenschaften für Bindungszwecke der with
-Anweisung ignoriert werden, sodass Code, der vor ECMAScript 2015 geschrieben wurde, wie erwartet funktioniert und nicht bricht.
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-array.prototype-%symbol.unscopables% |