2016-01-08 78 views
-1

在檢查鉻控制檯時,運行以下語句會返回奇怪的結果。當鏈接數學比較運算符時出現javascript的奇怪行爲

0.5 < 0.6 < 0.7 =>返回false

1.5 < 1.6 < 1.7 =>返回true

任何人都可以解釋這種現象?

alert("0.5 < 0.6 < 0.7 = " + (0.5 < 0.6 < 0.7)); 
 
alert("1.5 < 1.6 < 1.7 = " + (1.5 < 1.6 < 1.7));

+0

我不喜歡這些問題。已經有一百萬人了,有人插手一個控制檯,然後感到驚訝。有一個無限可能的組合,你可以運行到控制檯並詢問有關它的問題。 –

回答

7

表達

0.5 < 0.6 < 0.7 

的評估,這樣

(0.5 < 0.6) < 0.7 

由於第一部分是true,這將是有效

true < 0.7 

路兩側將試圖將轉換爲數字,並且自true1當轉換爲一個數,表達變

1 < 0.7 

這是不正確的。這就是爲什麼返回false


同樣的方式,在第二種情況下,

1.5 < 1.6 

true,所以它成爲1和表達式變爲

1 < 1.7 

這是true


您可以檢查布爾值的行爲,如數字,這樣

console.log(+true); 
// 1 
console.log(+false); 
// 0 
console.log(Number(true)); 
// 1 
console.log(Number(false)); 
// 0 
1
0.5 < 0.6 // true 

真變爲1,這是因爲類型改變與數

1 < 0.7 // false 

第二個的:

1.5 < 1.6 // true 

真變成1,因爲類型改變

1 < 1.7 // true 
0

關聯的<從左至右。並且布爾型true的數值爲1,並且false的值爲0。

把這個在一起:

  1. 0.5 < 0.6 < 0.7(0.5 < 0.6) < 0.71 < 0.7false

  2. 1.5 < 1.6 < 1.7(1.5 < 1.6) < 1.70 < 1.7true

其中圓括號使關聯性清楚。