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.