Why does 00.0 cause a syntax error?
This is weird. This is what happens at the JavaScript console in Chrome (version 42.0.2311.135, 64-bit).
> 0
< 0
> 00
< 0
> 0.0
< 0
> 00.0
X Uncaught > SyntaxError: Unexpected number
Firefox 37.0.2 does the same, although its error message is:
SyntaxError: missing ; before statement
There's probably some technical explanation regarding the way JavaScript parses numbers, and perhaps it can only happen when tinkering at the console prompt, but it still seems wrong.
Why does it do that?
The expressions 0.0
and 00.0
are parsed differently.
-
0.0
is parsed as a numeric literal 1 -
00.0
is parsed as:-
00
– octal numeric literal 2 -
.
– property accessor -
0
– identifier name
-
Your code throws syntax error because 0
is not a valid JavaScript identifier. The following example works since toString
is a valid identifier:
00.toString
1Section 7.8.3 – Leading 0 can be followed by decimal separator or ExponentPart
2Section B.1.1 – Leading 0 can be followed by OctalDigits
00
is evaluated as an octal number and .0
is evaluated as accessing that number's property. But since integers are not allowed to be used as property accessors, the error is thrown.
You get the same error for any other object:
'string'.0 // Syntax error: unexpected number
({}).0 // Syntax error: unexpected number
You can find related information about property accessors on MDN.