Javascript 为什么求幂运算符的左操作数为负时会出现语法错误?

Javascript 为什么求幂运算符的左操作数为负时会出现语法错误?,javascript,operator-precedence,exponent,ecmascript-2016,Javascript,Operator Precedence,Exponent,Ecmascript 2016,当我在JavaScript中使用指数运算符(**)时,它通常按预期工作: 2 ** 2 // 4 2 ** -2 // 0.25 但当左操作数为负时 -2 ** 2 我得到一个语法错误: 未捕获的语法错误:意外标记** 我可以通过在-2 (-2) ** 2 // 4 但我很好奇是什么导致了这个错误。其他运算符(+-*/%等)没有此问题。为什么**操作符会发生这种情况?很有趣。我确实找到了一些关于Mozilla的文档,详细说明了为什么这是不可能的 2**-3是可能的。这种行为是故意的

当我在JavaScript中使用指数运算符(
**
)时,它通常按预期工作:

2 ** 2   // 4
2 ** -2  // 0.25
但当左操作数为负时

-2 ** 2
我得到一个语法错误:

未捕获的语法错误:意外标记**

我可以通过在
-2

(-2) ** 2 // 4

但我很好奇是什么导致了这个错误。其他运算符(
+-*/%
等)没有此问题。为什么
**
操作符会发生这种情况?

很有趣。我确实找到了一些关于Mozilla的文档,详细说明了为什么这是不可能的


2**-3是可能的。

这种行为是故意的,是为了防止你写模棱两可的表达:

在大多数语言中,如PHP和Python以及其他具有 求幂运算符(**),定义了求幂运算符 比一元运算符(如一元+和)具有更高的优先级 一元-但也有一些例外。例如,在Bash中** 运算符的优先级定义为低于一元运算符。 在JavaScript中,不可能编写不明确的求幂运算 表达式,即不能放置一元运算符 (+/-/~/!/delete/void/typeof)紧跟在基数之前

-2 ** 2; 
// 4 in Bash, -4 in other languages. 
// This is invalid in JavaScript, as the operation is ambiguous. 


-(2 ** 2); 
// -4 in JavaScript and the author's intention is unambiguous.