kem*_*toe 4 javascript operator-precedence exponentiation ecmascript-2016
所以我在使用新的取幂运算符,我发现你不能在基数之前放置一元运算符.
let result = -2 ** 2; // syntax error
let result = -(2 ** 2); // -4
let x = 3;
let result = --x ** 2; // 4
Run Code Online (Sandbox Code Playgroud)
在JavaScript中,这是不可能写出暧昧幂表达式,即你不能把一元运算符(
+/-/~/!/delete/void/typeof)之前的基数.在大多数语言(如PHP和Python)和其他具有取幂运算符(通常
^或者**)的语言中,指数运算符被定义为具有比一元运算符(如一元+和一元)更高的优先级-,但也有一些例外.例如,在Bash中,**运算符被定义为具有比一元运算符更低的优先级.
我知道这是一个错误的设计.我不明白这个设计决定.谁是真的会感到惊讶,这-x ** 2是消极的?这不仅遵循其他主流编程语言,而且是数百年来常用的数学符号,并且教给每个高中代数学生.
在Javascript '1'+ 2是'12'和'1'-2是-1,但-1**2提出了一个错误,因为它可能是模糊的?帮助我理解这个设计决定.
我不明白这个设计决定.
了解更多关于它在https://esdiscuss.org/topic/exponentiation-operator-precedence,https://esdiscuss.org/topic/power-operator-why-does-2-3-throws,https://开头的github .com/rwaldron/tc39-notes/blob/master/es7/2015-09/sept-23.md #exponentiation-operator和https://github.com/rwaldron/tc39-notes/blob/master/es7/2015 -09/sept-24.md #exponentiation-operator.
谁是真的会感到惊讶,这
-x ** 2是消极的?
足够重要的人.以上资源的一些相关引用:
**绑定比一元操作员更严格会破坏x**-2.并且使它有时更紧,有时更宽松会太混乱,并导致其他优先倒置的机会. " - Waldemar Horwat**其他语言的历史之间存在冲突,[和]一元模式比二元语言更紧密,这方面的任何解决方案都会让很多人感到困惑. " - Mark S. Miller-x**2 === -(x ** 2)与-x ** 2 === (-x) ** 2 " - 亚历山大·琼斯-紧密**.实际上除了dot(一种特殊形式,其右操作数必须是词汇标识符 -名称)和方括号(本身不是中缀运算符),一元运算符绑定比JS中的二进制更严格,如C和其他C派生语言. " - Brendan Eich-52-5 ** 2- " - 戴夫赫尔曼**指数运算符.但人们通常会试图避免黑暗角落,因此他们永远不会对负面基础产生直觉. " - 戴夫赫尔曼在Javascript
'1'+ 2是'12'和'1'-2是-1,但-1**2提出了一个错误,因为它可能是模糊的?
那么他们在设计今天的语言扩展方面付出了相当大的努力:-)这是他们可以达成共识的最佳解决方案.
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |