Quais são as regras para invocar funções em literais de números no JS? [duplicado]

Esta questão já tem uma resposta aqui:

Por que não consigo acessar uma propriedade de um inteiro com um único ponto? 4 respostas

Desde que comecei a trabalhar com JS, achei que a única maneira de invocar uma função em um literal de número é colocá-lo na posição de expressão envolvendo-o com parens, da seguinte forma:

<code>1.toString();
// SyntaxError: identifier starts immediately after numeric literal

(1).toString();
// "1"
</code>

Hoje, ocorreu-me tentar isso:

<code>0.1.toString();
// "0.1"
</code>

Por que isso funciona? Um ponteiro para a especificação oficial seria ótimo.

Editar Ambiguidade foi o meu primeiro pensamento, mas depois decidi que não há ambiguidade em1.toString() ou. É mais profundo do que eu pensava, mas ainda acho que estou certo. Aqui está o porquê:

Nomes de propriedadeposso comece com dígitos

<code>var obj = { "1" : 1, "2" : 2 };
</code>

Nomes de propriedades que começam com dígitos só podem ser referenciados com colchetes

<code>obj.1;
// SyntaxError: Unexpected token ILLEGAL
obj['1'];
// 1
</code>

Além disso:

<code>1['toString']();
// '1'
</code>

Assim sendo,1. seguido por qualquer não-dígito será sempre uma chamada de método ou acesso à propriedade, nunca um número decimal. Da mesma forma,1. seguido por qualquer dígito será sempre um número decimal, nunca uma chamada de método ou acesso à propriedade.

questionAnswers(1)

yourAnswerToTheQuestion