Chris Dennis
Chris Dennis

Reputation: 1005

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?

Upvotes: 71

Views: 3371

Answers (2)

Salman Arshad
Salman Arshad

Reputation: 272386

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

Upvotes: 76

Robert Rossmann
Robert Rossmann

Reputation: 12139

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.

Upvotes: 22

Related Questions