¿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?
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
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.
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