2016-05-26 58 views
-1

爲什麼javaScript不允許使用雙重比較?例如,在64 < str.charCodeAt(i) && str.charCodeAt(i)<=77中,爲什麼我不能簡單地說64 < str.charCodeAt(i)<=77爲什麼javaScript不允許使用雙重比較?

+0

答案可能很簡單:「因爲語言規範不支持」。你在問一個哲學問題「爲什麼語言的設計者沒有在規範中包含這個功能」? – bacar

回答

1

你可以,但它不會做你認爲它會。

64 < str.charCodeAt(i)<=77 

被解析爲

(64 < str.charCodeAt(i)) <= 77 

所以它會執行<比較,得到一個布爾結果。然後它會將該布爾值轉換爲數字(零或1)並執行<=測試。

至於爲什麼這樣的問題,很可能C語言家族的約定(當JavaScript被設計時已經有20年了)似乎對於許多程序員來說是合適的和熟悉的。 C以同樣的方式工作。 Java並不是因爲它有一個真正的布爾類型,並且它不喜歡大多數隱式類型轉換,所以整個事情在這種情況下看起來像是一個語法錯誤。

0

這種語法的工作原理,但不會做你所期望的。

True == 1和False == 0都是真的。所以true > x爲真,其中x爲小於1的任何數目,並且其中,x是大於0

所以「雙比較」等小任何數量false > x爲真:

1 < 2 < 3

的計算結果爲:

true < 3

其大致等同於:

1 < 3

這在這種情況下是正確的。