首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么-1**2是JavaScript中的语法错误?

为什么-1**2是JavaScript中的语法错误?
EN

Stack Overflow用户
提问于 2017-04-22 15:54:33
回答 2查看 4.6K关注 0票数 58

在浏览器控制台中执行时,它显示为SyntaxError: Unexpected token **。在节点中尝试:

代码语言:javascript
复制
> -1**2
...
...
...
...^C

我以为这是一个算术表达式,其中**是幂运算符。其他操作员没有这样的问题。

奇怪的是,在第二行输入*/会触发执行:

代码语言:javascript
复制
> -1**2
... */
-1**2
  ^^
SyntaxError: Unexpected token **

这是怎么回事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-22 16:01:13

在浏览器控制台中执行它的

会显示SyntaxError: Unexpected **。

因为那是spec。这样设计的目的是为了避免混淆它是1的否定的平方(即(-1) ** 2),还是1的平方的否定(即-(1 ** 2))。这种设计是运算符优先的extensive discussion的结果,并检查了在其他语言中如何处理这一点,最后决定通过将其作为语法错误来避免意外行为。

票数 81
EN

Stack Overflow用户

发布于 2017-04-22 16:03:08

documentation on MDN

在JavaScript中,不可能编写模棱两可的求幂表达式,即不能将一元运算符(+/-/~/!/delete/void/typeof)紧跟在基数之前。

在同一文本中也解释了原因:

在大多数语言中(通常是^**),幂运算符定义为比一元运算符(如一元+和一元- )具有更高的优先级,但也有少数例外。例如,在Bash中,**操作符被定义为具有比一元操作符更低的优先级。

因此,为了避免混淆,决定代码必须消除歧义,并显式地放入括号:

代码语言:javascript
复制
(-1)**2

或者:

代码语言:javascript
复制
-(1**2) 

注意,二进制-不是这样处理的--优先级较低--因此最后一个表达式的结果与这个有效表达式的结果相同:

代码语言:javascript
复制
0-1**2

其他编程语言中的指数优先

正如在上面的引述中所肯定的那样,大多数具有中缀求幂运算符的编程语言,给予该运算符的优先级高于一元减号。

下面是其他一些给予一元减号运算符更高优先级的编程语言示例:

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43556752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档