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 数値」の図がわかりやすいです。