JavaScript おれおれ Advent Calendar 2011 – 12日目
JavaScriptで123.toString()はエラーになるけど、123..toString()は正常に動作する。これってトリビアの種になりませんか?
— 高梨ギンペイ / Ginpei (@ginpei_jp) 12月 11, 2011
というわけで、123.toString()は駄目だけど、ドット.を二つにした123..toString()はvalidです。
なんでかっていうと、123.までが数値として解釈されるから、です。
ですから123.toString()というコードは、123.という数値の直後にメソッド名toStringが出現する、と解釈されるため、パースエラーになっちゃいます。次のコードと等価です。
(123.)toString()
ドット.を二つにすると123.という数値の次にはドット演算子.があって、それからメソッド名が出現すると解釈されますので、123.に対してNumber.prototypeのtoString()が呼び出される事になります。
(123.).toString()
このあたり、JavaScript: The Good Partsの「2.3 数値」の図がわかりやすいです。