簡體   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