psm*_*ith 56 javascript exponentiation ecmascript-2016
它说,在浏览器控制台中执行它SyntaxError: Unexpected token **.在节点中尝试:
> -1**2
...
...
...
...^C
Run Code Online (Sandbox Code Playgroud)
我认为这是一个算术表达式,其中**是幂运算符.其他运营商没有这样的问题.
奇怪的是,*/在第二行输入会触发执行:
> -1**2
... */
-1**2
^^
SyntaxError: Unexpected token **
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
小智 79
在浏览器控制台中执行它说SyntaxError:Unexpected token**.
因为这是规范.设计的方式是为了避免混淆是否是一个(即(-1) ** 2)的否定的平方,或一个(即)的平方的否定-(1 ** 2).这种设计是对运算符优先级的广泛讨论的结果,并检查了如何在其他语言中处理它,最后决定通过使这成为语法错误来避免意外行为.
tri*_*cot 40
在JavaScript中,这是不可能写出暧昧幂表达式,即你不能把一元运算符(
+/-/~/!/delete/void/typeof)之前的基数.
原因也在同一文本中解释:
在大多数语言(如PHP和Python)和其他具有取幂运算符(通常
^或者**)的语言中,指数运算符被定义为具有比一元运算符(如一元+和一元)更高的优先级-,但也有一些例外.例如,在Bash中,**运算符被定义为具有比一元运算符更低的优先级.
因此,为了避免混淆,我们决定代码必须消除歧义并明确地放置括号:
(-1)**2
Run Code Online (Sandbox Code Playgroud)
要么:
-(1**2)
Run Code Online (Sandbox Code Playgroud)
作为旁注,二进制文件 -不会被这样处理 - 具有较低的优先级 - 因此最后一个表达式与此有效表达式具有相同的结果:
0-1**2
Run Code Online (Sandbox Code Playgroud)
正如上面引用中已经肯定的那样,大多数具有中缀取幂运算符的编程语言给予该运算符的优先级高于一元减号.
以下是编程语言的一些其他示例,它们为一元减运算符提供更高的优先级:
| 归档时间: |
|
| 查看次数: |
3864 次 |
| 最近记录: |