数值分隔符

欧美语言中,较长的数值允许每三位添加一个分隔符(通常是一个逗号),增加数值的可读性。比如,1000可以写作1,000

现在有一个提案,允许 JavaScript 的数值使用下划线(_)作为分隔符。

  1. let budget = 1_000_000_000_000;
  2. budget === 10 ** 12 // true

JavaScript 的数值分隔符没有指定间隔的位数,也就是说,可以每三位添加一个分隔符,也可以每一位、每两位、每四位添加一个。

  1. 123_00 === 12_300 // true
  2. 12345_00 === 123_4500 // true
  3. 12345_00 === 1_234_500 // true

小数和科学计数法也可以使用数值分隔符。

  1. // 小数
  2. 0.000_001
  3. // 科学计数法
  4. 1e10_000

数值分隔符有几个使用注意点。

  • 不能在数值的最前面(leading)或最后面(trailing)。
  • 不能两个或两个以上的分隔符连在一起。
  • 小数点的前后不能有分隔符。
  • 科学计数法里面,表示指数的eE前后不能有分隔符。

下面的写法都会报错。

  1. // 全部报错
  2. 3_.141
  3. 3._141
  4. 1_e12
  5. 1e_12
  6. 123__456
  7. _1464301
  8. 1464301_

除了十进制,其他进制的数值也可以使用分隔符。

  1. // 二进制
  2. 0b1010_0001_1000_0101
  3. // 十六进制
  4. 0xA0_B0_C0

注意,分隔符不能紧跟着进制的前缀0b0B0o0O0x0X

  1. // 报错
  2. 0_b111111000
  3. 0b_111111000

下面三个将字符串转成数值的函数,不支持数值分隔符。主要原因是提案的设计者认为,数值分隔符主要是为了编码时书写数值的方便,而不是为了处理外部输入的数据。

  • Number()
  • parseInt()
  • parseFloat()
  1. Number('123_456') // NaN
  2. parseInt('123_456') // 123