Frage

(3).constructor ist die Nummer, aber "constructor" in (3) ist Typeerror, warum?

War es hilfreich?

Lösung

Mit Verwendung des Eigenschaftenaccessor , die Zahl 3 ist verwandelte sich in ein Objekt von Anzahl . Und ein Objekt dieser Art einen Konstruktor hat und somit eine constructor Eigenschaft.

Aber wie ChaosPandion bereits erwähnt , der in Operator erfordert den richtigen Ausdruck ein Objekt aber 3 ist kein Objekt, sondern eine reine Zahlenliteral zu erhalten.

Andere Tipps

Die Spezifikation für den in Betreiber erklärt dies. siehe Schritt 5 der semantischen Auswertung Insbesondere.

11.8.7 Die in Operator

Die Produktion RelationalExpression: RelationalExpression in ShiftExpression wird wie folgt bewertet:

  1. Let Lref das Ergebnis RelationalExpression auszuwerten.
  2. Let LVAL GetValue (Iref) sein.
  3. sein Lassen rref das Ergebnis ShiftExpression auszuwerten.
  4. Let rval GetValue (Rref) sein.
  5. Wenn Type (rval) ist nicht Gegenstand, werfen ein Typeerror Ausnahme.
  6. Rückkehr das Ergebnis des Aufrufs der [[hasProperty]] interne Verfahren rval mit dem Argument ToString (lval).

Der Grund (3).constructor arbeitet, ist ein etwas schwieriger, aber im Wesentlichen zu verstehen, wenn Sie den Punktoperator auf einer Referenz mit einer primitiven Basis verwenden es wird in ein Objekt angehoben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top