[英]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
在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-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
” - 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.