posted: 2019/05/06

JavaScriptのn進数変換について調べて見つけた10..toSting(3)という記法について

JavaScriptのNumber.prototype.toStringは引数にradixを持っており、n進数変換がサクッとできる
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/toString
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.010. と省略することができる。ちなみに、この逆で 0.1.1 と省略する事もできる
MDNだと浮動小数点数リテラルを見るとうっすら書いてある(が、ちゃんとこれについて書いてるのは見つけられなかった)
つまりこれは
10.0.toString(4)
の省略記法ということだ。すっきりした。
逆に . を一つにしてしまうと、小数点として扱われてしまうらしく
10.toString(4)
という記法は出来ない。
() をつければ正常に構文として扱えるので、下記が書き方一番無難であろう
(10).toString(4)
Edit on Github