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]
Schreibbarnein
Aufzählbarnein
Konfigurierbarja

Beschreibung

Die Standard-Array-Eigenschaften, die für Bindungszwecke der with-Anweisung ignoriert werden, sind:

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.

js
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%

Browser-Kompatibilität

Siehe auch