JavaScript parsing is working as intended. You have declared the following:
23.toString()
We see this as an Integer with a function being called on it.
The parser doesn't. The parser sees an attempt to declare a floating-point literal. The parser uses this:
[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
It assumes that you are declaring a Floating-Point Literal because it is:
- not a variable, as it doesn't start with a letter or acceptable character
- is a numeric literal, as it starts with a numeric character
- is a floating point number, as it has a decimal point in it.
If you really, for all intents and purposes, want to call 23.toString()
, the course of action is to isolate the literal like so:
(23).toString(); //interprets 23 as literal
or
23..toString(); //interprets 23. as literal
That being said, JavaScript is flexible enough to know you want to use 23 as a String in most cases. This compiles fine.
var foo = "The answer is " + 42;
So does this.
var bar = "39" - 0 + 3; //42
This doesn't.
var baz = "39" + 3; //393!!!