Why does 00.0 cause a syntax error?

JavascriptNumbersSyntax Error

Javascript Problem Overview


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?

Javascript Solutions


Solution 1 - Javascript

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

1 Section 7.8.3 – Leading 0 can be followed by decimal separator or ExponentPart
2 Section B.1.1 – Leading 0 can be followed by OctalDigits

Solution 2 - Javascript

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChris DennisView Question on Stackoverflow
Solution 1 - JavascriptSalman AView Answer on Stackoverflow
Solution 2 - JavascriptRobert RossmannView Answer on Stackoverflow