javascript中指数运算用表示,如23得8,等价于math.pow(2,3);需注意优先级高于负号,负数幂须加括号,支持类型转换与**=赋值运算符。

JavaScript 中的指数运算用 ** 表示,不是括号(())。括号在 JS 里只起分组或调用作用,不参与幂运算。真正负责“几次方”的是双星号运算符 **,它从 ES2016(ES7)开始正式支持。
基本写法与等价关系
** 是中缀运算符,语法直观:底数 ** 指数。它和 Math.pow(底数, 指数) 数学结果完全一致:
-
2 ** 3→ 8,等价于Math.pow(2, 3) -
16 ** 0.5→ 4(即开平方),等价于Math.pow(16, 0.5) -
5 ** 0→ 1,任何非零数的 0 次方都是 1
优先级陷阱:负数和表达式要加括号
** 的优先级高于一元减号(-),所以 -2 ** 2 不是 (-2)² = 4,而是 -(2 ** 2) = -4。
- 想算负数的幂,必须显式加括号:
(-2) ** 2→ 4 - 含变量或运算的底数也要括起来:
(x + y) ** 2,不能写成x + y ** 2(那等于x + (y ** 2)) -
Math.pow(-2, 2)没这个问题,参数明确,无歧义
类型转换与边界行为
** 会尝试把操作数转为数值,但不会报错:
-
'2' ** 3→ 8(字符串 '2' 转为数字 2) -
2 ** '3'→ 8(字符串 '3' 转为数字 3) -
null ** 2→ 0(null转为 0) -
undefined ** 2→ NaN(undefined转为 NaN) - 对大整数支持更好,不像
Math.pow()内部有精度或类型转换限制
配套赋值运算符 **=
和 += 类似,**= 把当前值按指数更新:
-
let a = 3; a **= 2;→a变成 9 -
let b = 10; b **= 0.5;→b变成约 3.162 - 等价于
b = b ** 0.5,但更简洁











