Array.prototype[Symbol.unscopables]
Die [Symbol.unscopables]
Dateneigenschaft von Array.prototype
wird von allen Array
Instanzen geteilt. Sie enthält Eigenschaftsnamen, die vor der ES2015-Version nicht in den ECMAScript-Standard aufgenommen wurden und die für Bindungszwecke von with
Anweisungen ignoriert werden.
Wert
Ein Objekt mit null
-Prototyp mit den unten angegebenen Eigenschaftsnamen und deren Werten, die auf true
gesetzt sind.
Eigenschaften der Array.prototype[Symbol.unscopables] -Property |
|
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | ja |
Beschreibung
Die Standard-Array
-Eigenschaften, die für Bindungszwecke von 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 unscopable gemacht werden und ein toString()
innerhalb der with
Anweisung weiterhin auf das Array aufgerufen wird.
Siehe Symbol.unscopables
, um unscopable Eigenschaften für Ihre eigenen Objekte zu setzen.
Beispiele
Stellen Sie sich vor, der Aufruf values.push('something')
unten befindet sich in einem Code, der vor ECMAScript 2015 geschrieben wurde.
var values = [];
with (values) {
values.push("something");
}
Als ECMAScript 2015 die Array.prototype.values()
Methode einführte, begann die with
Anweisung im obigen Code values
als die values.values
Array-Methode zu interpretieren, anstatt die externe Variable values
. Der Aufruf values.push('something')
würde fehlschlagen, da jetzt auf push
auf der values.values
Methode zugegriffen wird. Dies führte dazu, dass ein Fehler bei Firefox gemeldet wurde (Firefox Bug 883914).
Die [Symbol.unscopables]
Dateneigenschaft für Array.prototype
bewirkt, dass die ab ECMAScript 2015 eingeführten Array
-Eigenschaften für Bindungszwecke der with
Anweisung ignoriert werden — wodurch Code, der vor ECMAScript 2015 geschrieben wurde, weiterhin wie erwartet funktioniert und nicht fehlschlägt.
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-array.prototype-%symbol.unscopables% |
Browser-Kompatibilität
BCD tables only load in the browser