← 返回题目列表

数值分隔符和幂运算符有什么用?使用时有哪些限制?

简单 第 25 / 28 题 更新于 2026/07/29
ES6Number运算符

简化版

数值分隔符 _ 用来提升长数字可读性,比如 1_000_000;幂运算符 ** 用来表示乘方,比如 2 ** 10 等于 1024。

它们主要改善代码表达,不改变数值本质。_ 只能放在数字中间,不能放在开头、结尾、小数点旁边或连续出现;** 和一元运算符组合时要加括号,比如 -(2 ** 2)

详细版

const amount = 1_000_000;
const mask = 0b1111_0000;
const color = 0xff_00_aa;

console.log(amount); // 1000000
console.log(2 ** 10); // 1024

非法写法:

// 1__000
// 1_
// _100
// 1_.2

幂运算符优先级有特殊限制:

-(2 ** 2); // -4
// -2 ** 2; // SyntaxError

完整版教学

一、数值分隔符解决可读性问题

长数字最怕少看一位或多看一位。

const maxSize = 10485760;
const readableMaxSize = 10_485_760;

两个值完全一样,但后者更容易读。

数值分隔符是给人看的,不是给运行时新增一种数字类型。

二、分隔符不影响数值大小

console.log(1_000 === 1000); // true
console.log(0b1010_0001 === 0b10100001); // true

它可以用于十进制、二进制、八进制、十六进制、BigInt 等数字字面量。

写法
1_000_0001000000
0b1111_0000240
1_000n1000n

三、分隔符的位置限制

_ 只能在两个数字字符之间。

const ok = 123_456;

不能放在这些地方:

// const a = _123;
// const b = 123_;
// const c = 123__456;
// const d = 1_.5;

这些限制让数字字面量保持明确解析。

四、幂运算符替代 Math.pow

Math.pow(2, 10); // 1024
2 ** 10; // 1024

** 让数学表达更接近公式。

const area = Math.PI * radius ** 2;

对于简单幂运算,它比 Math.pow 更直观。

五、幂运算符是右结合

2 ** 3 ** 2; // 512

它等价于:

2 ** (3 ** 2); // 2 ** 9

如果想表达 (2 ** 3) ** 2,必须加括号。

六、和一元运算符组合要加括号

-(2 ** 2); // -4
(-2) ** 2; // 4

不能直接写:

// -2 ** 2

这是语法层面的限制,用括号表达意图最清楚。

七、常见误区与追问

  • 误区:数值分隔符会改变数字字符串展示。 它只存在于源码字面量中,运行时值没有下划线。
  • 误区:下划线可以随便放。 它只能放在数字之间,不能连续或贴着小数点。
  • 误区:2 ** 3 ** 2 从左往右算。 幂运算符是右结合。
  • 误区:-2 ** 2 表示负二的平方。 这会产生语法错误,应加括号。
  • 追问:为什么 radius ** 2Math.pow 常更直观? 它更接近数学公式,减少函数调用包裹。
  • 追问:分隔符适合哪些数字? 金额、字节数、位掩码、颜色值、BigInt 等长字面量。

八、加强记忆

记住两个点:

_  -> readability only
** -> power, right-associative

回答时用 1_000_0002 ** 10 举例,再补位置限制和一元负号括号问题,就能覆盖大多数追问。