在檢查鉻控制檯時,運行以下語句會返回奇怪的結果。當鏈接數學比較運算符時出現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));
在檢查鉻控制檯時,運行以下語句會返回奇怪的結果。當鏈接數學比較運算符時出現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.5 < 0.6 < 0.7
的評估,這樣
(0.5 < 0.6) < 0.7
由於第一部分是true
,這將是有效
true < 0.7
路兩側將試圖將轉換爲數字,並且自true
是1
當轉換爲一個數,表達變
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
0.5 < 0.6 // true
真變爲1,這是因爲類型改變與數
1 < 0.7 // false
第二個的:
1.5 < 1.6 // true
真變成1,因爲類型改變
1 < 1.7 // true
的關聯的<
從左至右。並且布爾型true
的數值爲1,並且false
的值爲0。
把這個在一起:
0.5 < 0.6 < 0.7
是(0.5 < 0.6) < 0.7
是1 < 0.7
是false
。
1.5 < 1.6 < 1.7
是(1.5 < 1.6) < 1.7
是0 < 1.7
是true
。
其中圓括號使關聯性清楚。
我不喜歡這些問題。已經有一百萬人了,有人插手一個控制檯,然後感到驚訝。有一個無限可能的組合,你可以運行到控制檯並詢問有關它的問題。 –