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 von Array.prototype[Symbol.unscopables]
Schreibbarnein
Aufzählbarnein
Konfigurierbarja

Beschreibung

Die Standard-Array-Eigenschaften, die für Bindungszwecke von 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 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.

js
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

Siehe auch