繁体   English   中英

JavaScript指数一元运算符设计决策

[英]JavaScript exponentiation unary operator design decision

所以我在使用新的取幂运算符,我发现你不能在基数之前放置一元运算符。

let result = -2 ** 2; // syntax error
let result = -(2 ** 2); // -4
let x = 3;
let result = --x ** 2; // 4

MDN文档

在JavaScript中,不可能编写一个模糊的取幂表达式,即你不能在基数之前放置一元运算符( + / - / ~ / ! / delete / void / typeof )。

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

我知道这是一个错误的设计。 我不明白这个设计决定。 谁真的会感到惊讶-x ** 2是负面的? 这不仅遵循其他主流编程语言,而且是数百年来常用的数学符号,并且教给每个高中代数学生。

在Javascript'1 '1'+ 2'12''1'-2-1但是-1**2引发错误,因为它可能是不明确的? 帮助我理解这个设计决定。

我不明白这个设计决定。

了解更多关于它在https://esdiscuss.org/topic/exponentiation-operator-precedencehttps://esdiscuss.org/topic/power-operator-why-does-2-3-throwshttps://开头的github .com / rwaldron / tc39-notes / blob / master / es7 / 2015-09 / sept-23.md#exponentiation-operatorhttps://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 ” - Alexander Jones
  • 然而问题是,在取幂表达式之前,罕见的一元减去,缺少上标与较小字体的消息-**更紧密。确实除了点(一个特殊形式,其右操作数必须是词汇标识符名称和方括号(本身不是中缀运算符),一元运算符绑定比JS中的二进制更紧密,就像C和其他C派生语言一样。 “ - Brendan Eich
  • 对于数学似乎很明显, -5 2但是, -5 ** 2 ,因为周围管道符空白的即使没有空间。 -似乎是字面的一部分。” -戴夫·赫尔曼
  • [关于编程语言的优先顺序],“ 实际上没有人会从其他语言中对此进行说明。同意人们有一个假设,即**是指数运算符。但人们通常会试图避免黑暗角落,因此他们永远不会对负基础产生直觉“ -戴夫·赫尔曼

在Javascript'1 '1'+ 2'12''1'-2-1但是-1**2引发错误,因为它可能是不明确的?

那么他们在设计今天的语言扩展方面付出了相当多的努力:-)这是他们可以达成共识的最佳解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM