JSのproposal-numeric-separatorを実装したよ
タイトルの通りなんだけど、書くのが遅れてしまった。
V8 のmasterにマージされた。
機能
javascriptのプロポーザルで数値リテラルの間にアンダースコアを挿入できるやつ
現在stage3にあってまだ正式に採用されているわけではない。
このスライドにも書いた
例.
1_0_00_0 0xFF_FF_FF 0b0101_01_01 0o7_7_7
16進数、10進数、8進数、2進数の各リテラルに対応している。
あとBigIntにも当然対応している
39_950_934n
ただ、実装したあとに修正してもらったんだけど、implicit octalには対応していない。
0777_7 // Error!
あと、以下の場合はすべてエラー
0x_000 // Error ! 0b_01 // Error ! 0o_10 // Error !
アンダースコアの重複と末尾もだめ
12__00 // Error ! 1200_ // Error !
制限
キャストされる数値には使えません!
Number('1_0_0') // Error ! parseInt('1_0_0', 10) // Error !
以下のIssueに詳しい
簡単に話すと今までは
IsNaN(Number('1_0_0')) // true
だったので急にアンダースコアを数値として使えるようになると、NaN
であることを期待しているコードが壊れるからという理由。
そのようなコードが一体どれほどあるのか知らないけど安全側に倒した。
breaking webを避けるためには仕方ないかなと言う感じ。
以上です。