メインコンテンツまでスキップ

数値区切り文字

· 約2分
Mathias Bynens ([@mathias](https://twitter.com/mathias))

大きな数値リテラルは、特に繰り返しの数字が多い場合、人間の目で素早く解析するのが困難です。

1000000000000
1019436871.42

可読性を向上させるために、新しいJavaScriptの言語機能で数値リテラルにアンダースコアを区切り文字として使用できるようになりました。その結果、上記のような数値が千単位ごとにグループ化して書き直すことができます。

1_000_000_000_000
1_019_436_871.42

これにより、最初の数値が1兆であることや、2番目の数値が約10億であることが簡単に分かるようになります。

数値区切り文字は、さまざまな種類の数値リテラルの可読性向上に役立ちます。

// 数字を千単位でグループ化した10進数整数リテラル:
1_000_000_000_000
// 数字を千単位でグループ化した10進数リテラル:
1_000_000.220_720
// ビットをオクテット単位でグループ化した2進数整数リテラル:
0b01010110_00111000
// ビットをニブル単位でグループ化した2進数整数リテラル:
0b0101_0110_0011_1000
// 数字をバイト単位でグループ化した16進数整数リテラル:
0x40_76_38_6A_73
// 数字を千単位でグループ化したBigIntリテラル:
4_642_473_943_484_686_707n

数値区切り文字は8進数整数リテラルでも動作します(ただし、そのようなリテラルで区切り文字が有益となる例を思いつきません)。

// 8進数整数リテラル内の数値区切り文字: 🤷‍♀️
0o123_456

注意すべき点として、JavaScriptにはExplicitな0oプレフィックスなしのレガシーな8進数リテラル構文もあります。例えば、017 === 0o17です。この構文はstrictモードやモジュール内ではサポートされておらず、現代のコードでは使用すべきではありません。したがって、これらのリテラルには数値区切り文字はサポートされていません。代わりに0o17形式のリテラルを使用してください。

数値区切り文字のサポート