当我在JavaScript中使用指数运算符(**
)时,它通常可以按预期工作:
2 ** 2 // 4
2 ** -2 // 0.25
但是当左操作数为负时
-2 ** 2
我收到语法错误:
未捕获的SyntaxError:意外令牌**
我可以通过在-2
上加上括号来轻松解决它
(-2) ** 2 // 4
但是我很好奇导致此错误的原因。其他运算符(+ - * / %
等)没有此问题。为什么**
运算符会发生这种情况?
答案 0 :(得分:2)
此行为是故意的,可以防止您编写歧义的表达式。 From MDN:
在大多数语言中,例如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.
答案 1 :(得分:-1)
有趣。我确实在Mozilla上找到了一些文档,这些文档说明了为什么这是不可能的。
2 ** -3是可能的。