¿Cuáles son las reglas para invocar funciones en números literales en JS? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Por qué no puedo acceder a una propiedad de un entero con un solo punto? 4 respuestas

Desde que comencé a trabajar con JS, he pensado que la única forma de invocar una función en un número literal es ponerla en posición de expresión envolviéndola con parens, de esta forma:

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

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

Hoy se me ocurrió intentar esto:

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

¿Por qué funciona esto? Un puntero en la especificación oficial sería genial.

Editar La ambigüedad fue mi primer pensamiento, pero luego decidió que no hay ambigüedad en1.toString() ya sea. Es más profundo de lo que pensé al principio, pero sigo creyendo que tengo razón. Este es el por qué:

Nombres de propiedadespuede comenzar con dígitos

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

Los nombres de propiedades que comienzan con dígitos solo pueden ser referenciados entre corchetes

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

También:

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

Por lo tanto,1. seguido de cualquier no-dígito siempre habrá un método de acceso o acceso a la propiedad, nunca un número decimal. Igualmente,1. seguido de cualquier dígito siempre será un número decimal, nunca un método de acceso o acceso a la propiedad.

Respuestas a la pregunta(1)

Su respuesta a la pregunta