当前位置: 首页 > 知识库问答 >
问题:

为什么-1**2在JavaScript中是一个语法错误?

邵宜年
2023-03-14

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

> -1**2
...
...
...
...^C

我认为这是一个算术表达式,**是幂运算符。其他运营商不存在此类问题。

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

> -1**2
... */
-1**2
  ^^
SyntaxError: Unexpected token **

这里发生了什么?

共有2个答案

印振国
2023-03-14

从MDN上的留档:

在JavaScript中,不可能编写不明确的求幂表达式,即不能将一元运算符(/-/~//删除/无效/ )紧跟在基数之前。

同一文本也解释了原因:

在大多数语言中,如PHP和Python以及其他具有求幂运算符的语言(通常是^***),求幂运算符的优先级高于一元运算符,如一元和一元-,但也有一些例外。例如,在Bash中,**运算符被定义为具有比一元运算符更低的优先级。

因此,为了避免混淆,决定代码必须消除歧义,并明确地将括号:

(-1)**2

或:

-(1**2) 

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

0-1**2

正如在上面的引文中已经确认的那样,大多数具有中缀求幂运算符的编程语言对该运算符的优先级高于一元减号。

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

  • 卑诗省
  • VBScript
  • AppleScript
  • COBOL
  • 雷克斯
  • 兽人

堵才哲
2023-03-14

在浏览器控制台中执行它会显示SyntaxError:Unexpected token**。

因为这是规范的设计方式,以避免混淆它是一的平方反比(即(-1)**2),还是一的平方反比(即-(1**2))。此设计是对运算符优先级进行广泛讨论的结果,并检查了其他语言如何处理此问题,最后决定通过将其设置为语法错误来避免意外行为。

 类似资料:
  • 问题内容: 所以我在推特上看到了这两个 问题。语法错误怎么回事,但不是吗? 问题答案: 我猜想,如果可能的话,贪婪地将其解析为数字的一部分,使其成为 ,而不是方法调用的一部分。 小数点附近不能有空格,但是在方法调用中,您可以在空格前后添加空格。如果数字后跟一个空格,则该数字的解析将终止,因此无歧义。 让我们看一下不同的情况及其解析方式:

  • 问题内容: 我知道解决了溢出问题:将两个大的正长添加在一起时,您可能最终得到一个负数。有人可以解释这种按位移位如何神奇地解决溢出问题吗?和它有什么不同? 我的怀疑:我认为这与Java使用两个补码的事实有关,因此,如果我们有额外的空间,则溢出是正确的数字,但是因为我们没有,所以它变为负数。因此,当您移位并以零进行划桨时,由于两个补全,它神奇地得到了固定。但是我可能是错的,大脑有点位的人必须确认。:)

  • 问题内容: Python如何评估表达式? 我插了多少,这就是答案。请任何人可以解释这种行为 因为它是印刷,因为它是印刷 问题答案: 您的表情与: 可以在任何数字表达式之前使其为负,或不执行任何操作(存在对称性选项)。带有负号: 和 我看到您澄清了您的问题,说您来自C背景。在Python中,没有像C和C这样的增量运算符,这可能是造成混淆的原因。要递增或递减变量,或在Python中使用以下样式:

  • 问题内容: 注意到今天在我们的代码库中有一行代码,我认为肯定会因语法错误而使构建失败,但是测试通过了,显然它实际上是有效的python(在2.x和3中)。 条件表达式有时不需要空格: 如果LHS是变量,则不起作用: 但是它似乎仍然可以与其他类型的文字一起使用: 这是怎么回事,出于某种原因,它是否有意成为语法的一部分?这个奇怪的怪癖是已知/记录的行为吗? 问题答案: 令牌之间的空白 除逻辑行的开头或

  • 问题内容: 我的交互式控制台的简要记录: 到底为什么呢? 编辑: 为了对比起见,请考虑运算符。 这使得有很大的意义,因为虽然和都意味着同样的事,作为一个条件语句,他们真的是不一样的东西。 再次编辑: 更有趣的后果: 问题答案: 因为Python中的Boolean是整数的子类型。从文档中: 布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以视为假或真)。在数字上下文中(例如

  • 为什么这个程序的输出是而不是 当你除以3/2,它等于1.5,我认为Java只取整数的第一个值。发生什么事?

  • 我尝试在浏览控制台中测试此语法,但遇到错误: 对于上面的代码,我关心的是是否会引发任何错误。