External Post

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で見てみる。

https://astexplorer.net/#/gist/2c4b10278940ebe6717e57845083e5b4/5b00a08e79475b0c67d7bd7c8293efff97f3b70a

するとこの部分に注目することができそうだ。

"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)
この記事の修正をする