2017-04-15 87 views
0

爲什麼當我在Chrome控制檯中運行這段代碼時,我得到了不同的結果?Javascript中的比較運算符

1 < 2 < 3 
true 

3 > 2 > 1 
false 
+2

因爲檢查返回一個布爾值。然後,布爾值被隱式轉換爲一個數字,用於下一次比較。 –

回答

1

因爲編程不是數學。

1 < 2返回布爾值true然後將其隱式轉換爲數字1,這確實少於三個。第二個例子中發生的情況相同,但1 > 1返回false

2

Javascript不支持expression like 0 < x < 10。因爲<>運算符具有相同的優先級並從左到右應用,實際上,正在評估的是(1 < 2) < 3

由於表達(1 < 2)評估爲真時,第二<操作,實際上,評估是否true小於或等於3

1 < 2 < 3 
(1 < 2) < 3 
true < 3 
true 

你的第二個例子可以通過應用相同的過程來理解:

3 > 2 > 1 
(3 > 2) > 1 
true > 1 
false 

至於爲什麼true < 3計算結果爲真,true > 1計算結果爲假,答案是更復雜一點,並有在Javascript中使用寬鬆的輸入系統。總之,與數字相比,javascript的true值的計算結果爲1,其'false值的計算結果爲0.

本章介紹過程應用程序的替換方法相當有幫助。 https://mitpress.mit.edu/sicp/full-text/sicp/book/node10.html

+1

請注意,JavaScript(以及許多其他語言)的行爲部分是因爲它們來自C,它沒有布爾類型。通常在C編程中(在官方布爾頭文件之前),會使用預處理器指令來定義'FALSE = 0'和'TRUE = 1'。 –