🐽
JavaScriptの10..toSting(3)というピリオドが2つ続く記述を見つけたのでを調べた
記事作成日: 2019-05-06
JavaScriptのNumber.prototype.toString
は引数にradixを持っており、n進数変換がサクッとできる
let num = 10
num.toString(4)
// => "22"
で、これについて探っていた所、こんなやり方があることに気付いた
10..toString(4)
// => "22"
はて。10..
とは珍妙な。これはなにかと調べる。
ASTにかけてみる
AST Explorerで見てみる。
するとこの部分に注目することができそうだ。
"callee": {
"type": "MemberExpression",
"object": {
"type": "Literal",
"value": 10, // 10の値
"raw": "10." // 10. となっている
},
"property": {
"type": "Identifier",
"name": "toString" // これがtoStringになっている
},
}
確かにJavaScriptは 10.0
を 10.
と省略することができる。ちなみに、この逆で 0.1
で .1
と省略する事もできる
MDNだと浮動小数点数リテラルを見るとうっすら書いてある(が、ちゃんとこれについて書いてるのは見つけられなかった)
つまりこれは
10.0.toString(4)
の省略記法ということだ。すっきりした。
逆に .
を一つにしてしまうと、小数点として扱われてしまうらしく
10.toString(4)
という記法は出来ない。
()
をつければ正常に構文として扱えるので、下記が書き方一番無難であろう
(10).toString(4)
ナウい感じで行きたければOptional Chainingを使う手もあるだろう。全く意味の無いoptionalであるが、..
よりは驚きが少なくタイプ数が少なくて済む
10?.toString(4)
Discussion