Come sarebbe il parser sapere che la parte che segue il carattere .
ha lo scopo di indicare una chiamata al metodo al posto di un'altra parte del numero? Per esempio:
10.1 // This is a number with a floating point
10.toMillion() //How does it know that this shouldn't be part of the number?
Per questo motivo, non è possibile chiamare metodi su letterali numerici. Inserendo il letterale tra parentesi (grouping operator), il runtime valuterà l'espressione contenuta e applicherà il metodo al risultato di tale valutazione.
L'operatore di raggruppamento rimuove l'ambiguità del carattere .
.
Aggiornamento
Dopo qualche pensiero e qualche indagine attraverso le specifiche, v'è un buon motivo per non consentire l'uso di un lookahead per determinare se quanto segue il carattere .
fa parte del numero o un identificatore di proprietà.
Come @ CygnusX1 menzionato nei commenti, si avrebbe comunque che le due situazioni (.
seguite da una cifra e .
seguite da un carattere non numerico) potrebbero essere differenziate mediante l'uso di un lookahead. Poiché gli identificatori non possono iniziare con un numero, se un carattere numerico segue lo .
, deve essere un numero. Se un carattere non numerico segue lo .
, non può far parte del numero. Ma non è giusto.
V'è una situazione in cui un carattere non numerico può seguire il carattere .
ma essere ancora parte del numero:
console.log(1.e5); // Logs '100000'
Il e
indica che ciò che segue è la esponente, e può essere minuscolo o maiuscolo. Per questo motivo, l'utilizzo di un lookahead dovrebbe tenere conto del fatto che se il carattere che segue lo .
è e
o E
, potrebbe comunque rappresentare un metodo o parte del numero. È più semplice non consentire l'utilizzo di proprietà su valori letterali numerici.
fonte
2012-10-11 09:02:43
Whya stai selezionando 'Number.isNaN'? Intendi 'this.isNaN()'? – David
Oltre alle risposte sottostanti, consulta: '987654321..toMillion()' – Izkata
@David - Sarebbe semplicemente 'isNaN (this)' (è una funzione globale, non una proprietà di 'Number.prototype'). –