10.toString() と書けない理由

演算の高速化のために、Number型やString型などはプリミティブ値として保持されてる。

だから、たとえば「10.times()」じゃなくて「(10).times()」ってやらないとダメ。Rubyとは違います。

これは 以前に気になって調べた事があるのですが、オブジェクト・プリミティブといった深遠な理由ではなくて単に文法上の問題だったように覚えています。確かドットが小数点として構文解析されてしまってメソッド呼び出しとして扱われないとか、そんな程度のつまんない理由でした。

このため、小数点とメソッド呼び出しを明確に区別できるように書いてあげればカッコなしでも実行可能です。例えば…、

10.1.toString();

これは実行できます。また、

10..toString();

最初のドットが小数点として解析されるので、こんな記述でも実行できてしまいます(Safari4とFirefox3.5で確認、他は分かりません)。

数値リテラルとして 10. なんて書き方を許可するぐらいなら

10.toString();

を実行可能にすべきで、ECMAScript仕様のバグとしか思えません。