Warum (3) .constructor ist gültig, solange die „Konstruktor“ in (3) nicht gültig ist?
-
28-09-2019 - |
Frage
(3).constructor
ist die Nummer, aber "constructor" in (3)
ist Typeerror, warum?
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:
- Let Lref das Ergebnis RelationalExpression auszuwerten.
- Let LVAL GetValue (Iref) sein.
- sein Lassen rref das Ergebnis ShiftExpression auszuwerten.
- Let rval GetValue (Rref) sein.
- Wenn Type (rval) ist nicht Gegenstand, werfen ein Typeerror Ausnahme.
- 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.