幂运算符是右结合的:
a ** b ** c
等于
a ** (b ** c)
。
在大多数语言里,比如 PHP、Python 等那些有幂运算符(
**
)的语言,幂运算符被定义有一个比一元运算符,比如一元的
+
和一元的
-
更高的运算顺序,但有一些例外。在 Bash 语言里,
**
运算符被定义有一个比一元运算符更低的运算顺序。
在 JavaScript 中,不可能写出模棱两可的幂表达式。也就是说,你不能将一元运算符(
+/-/~/!/delete/void/typeof
)放在底数之前;
这样做会导致语法错误
。
例如,
-2 ** 2
在 Bash 中为 4,但在其他语言(如 Python)中为 -4。这在 JavaScript 中是无效的,因为操作不明确。你必须在两边加上括号——例如,作为
-(2 ** 2)
——以使意图明确。
请注意,某些编程语言使用插入符号
^
进行求幂,但 JavaScript 使用该符号表示
逻辑异或运算符
。
NaN ** 0
(和等价的
Math.pow(NaN, 0)
)是
NaN
不通过数学运算传播的唯一情况——尽管操作数是
NaN
,但它返回
1
。此外,
base
为 1 且
exponent
为非有限(±Infinity 或
NaN
)的行为与 IEEE 754 不同,IEEE 754 指定结果应为 1,而 JavaScript 返回
NaN
以保持与其原始行为的向后兼容性。
2 ** 3; // 8
3 ** 2; // 9
3 ** 2.5; // 15.588457268119896
10 ** -1; // 0.1
NaN ** 2; // NaN
NaN ** 0; // 1
1 ** Infinity; // NaN
2 ** 3 ** 2; // 512
2 ** (3 ** 2); // 512
(2 ** 3) ** 2; // 64
取幂表达式的值的相反数:
-(2 ** 2); // -4
将幂表达式的底数转化为一个负数:
(-2) ** 2; // 4
Specification