¿Por qué 00.0 causa un error de sintaxis?


Esto es raro. Esto es lo que sucede en la consola JavaScript en Chrome (versión 42.0.2311.135, 64 bits).

> 0
< 0
> 00
< 0
> 0.0
< 0
> 00.0
X Uncaught > SyntaxError: Unexpected number

Firefox 37.0.2 hace lo mismo, aunque su mensaje de error es:

SyntaxError: missing ; before statement

Probablemente haya alguna explicación técnica con respecto a la forma en que JavaScript analiza los números, y tal vez solo pueda suceder cuando se hace un retoque en la consola, pero todavía parece incorrecto.

¿por Qué hace eso?

Author: Salman A, 2015-05-21

2 answers

Las expresiones 0.0 y 00.0 se analizan de manera diferente.

  • 0.0 se analiza como un literal numérico 1
  • 00.0 se analiza como:
    • 00 - literal numérico octal 2
    • . - accessor de propiedad
    • 0 - nombre identificador

Su código genera un error de sintaxis porque 0 no es un identificador JavaScript válido. El siguiente ejemplo funciona ya que toString es válido identificador:

00.toString

1Sección 7.8.3 – 0 puede ser seguido por separador decimal o ExponentPart
2Sección B. 1.1 – 0 puede ser seguido por OctalDigits

 77
Author: Salman A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-28 05:18:15

00 se evalúa como un número octal y .0 se evalúa como acceder a la propiedad de ese número. Pero como los enteros no están permitidos para ser usados como accesores de propiedad, el error es lanzado.

Obtienes el mismo error para cualquier otro objeto:

'string'.0 // Syntax error: unexpected number
({}).0 // Syntax error: unexpected number

Puede encontrar información relacionada con los accesores de propiedad en MDN.

 22
Author: Robert Rossmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-21 13:07:06