Da quando ho iniziato a lavorare con JS, ho pensato che l'unico modo per richiamare una funzione su un numero letterale è di metterlo in posizione espressione avvolgendolo con parentesi, in questo modo:Quali sono le regole per richiamare le funzioni sui numeri letterali in JS?
1.toString();
// SyntaxError: identifier starts immediately after numeric literal
(1).toString();
// "1"
Oggi, mi è venuto in mente di provare questo:
0.1.toString();
// "0.1"
Perché funziona? Un puntatore alle specifiche ufficiali sarebbe fantastico.
Modifica L'ambiguità è stato il mio primo pensiero, ma poi ho deciso che non c'è ambiguità neanche nello 1.toString()
. È più profondo di quanto pensassi, ma continuo a pensare che abbia ragione. Ecco perché:
nomi delle proprietà può cominciare con cifre
var obj = { "1" : 1, "2" : 2 };
nomi delle proprietà che iniziano con le cifre possono essere referenziati soltanto con parentesi quadre
obj.1;
// SyntaxError: Unexpected token ILLEGAL
obj['1'];
// 1
anche:
1['toString']();
// '1'
Pertanto, 1.
seguito da qualsiasi non cifra sarà sempre una chiamata al metodo o accesso alla proprietà, mai un numero decimale. Allo stesso modo, 1.
seguito da qualsiasi cifra sarà sempre un numero decimale, mai una chiamata al metodo o accesso alla proprietà.
come nota, è possibile utilizzare '1..toString()', il primo '.' indica il punto decimale, il secondo indica l'utilizzo per la funzione. – zzzzBov
Correlati: http://stackoverflow.com/q/2300197 – CMS
Intelligente, grazie a zzzzBov e CMS. – mwcz