Domanda

(3).constructor è numero, ma "constructor" in (3) è TypeError, perché?

È stato utile?

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:

  1. Sia Lref essere il risultato della valutazione RelationalExpression.
  2. Let lval essere GetValue (Lref).
  3. Lasciate rref essere il risultato della valutazione ShiftExpression.
  4. Let rval essere GetValue (Rref).
  5. Se Type (rval) non è oggetto, gettare un TypeError eccezione.
  6. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top