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 respostasDesde 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.