Perché (3) .constructor è valida fino ad esaurimento “costruttore” di (3) non è valido?
-
28-09-2019 - |
Domanda
(3).constructor
è numero, ma "constructor" in (3)
è TypeError, perché?
Soluzione
Con utilizzando il proprietà di accesso , il numero 3
è trasformato in un oggetto di Numero . E un oggetto di questo tipo ha un costruttore, e quindi una proprietà constructor
.
come ChaosPandion out già appuntito , il in
operatore richiede la giusta espressione per produrre un oggetto ma 3
non è un oggetto ma un numero letterale pianura.
Altri suggerimenti
La specifica per l'operatore in
spiega questo. Specificamente, vedere la fase 5 di valutazione semantica.
11.8.7 l'operatore in
Il RelationalExpression produzione: RelationalExpression in ShiftExpression è valutata come segue:
- Sia Lref essere il risultato della valutazione RelationalExpression.
- Let lval essere GetValue (Lref).
- Lasciate rref essere il risultato della valutazione ShiftExpression.
- Let rval essere GetValue (Rref).
- Se Type (rval) non è oggetto, gettare un TypeError eccezione.
- Ritorna il risultato della chiamata al [[hasProperty]] metodo interno di rval con l'argomento ToString (lval).
Il motivo (3).constructor
funziona è un un po 'più impegnativo per capire, ma in sostanza, quando si utilizza l'operatore punto su un riferimento con una base primitiva si arriva sollevato in un oggetto.