JavaScript在設(shè)計時,有兩種比較運算符:
- == 比較,它會自動轉(zhuǎn)換數(shù)據(jù)類型再比較,很多時候,會得到很詭異的結(jié)果,不推薦。
- === 比較,它不會自動轉(zhuǎn)化數(shù)據(jù)類型,如果數(shù)據(jù)類型不一致,返回false,如果一致,再比較。推薦。不過注意先轉(zhuǎn)變數(shù)據(jù)類型。
另一個例外是 NaN,這個特殊的 number 與其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判斷NaN的方法是通過 isNaN() 函數(shù):
isNaN(NaN); // true
最后要注意浮點數(shù)的相等比較:
1 / 3 === (1 - 2 / 3); // false
這不是JavaScript的設(shè)計缺陷。浮點數(shù)在運算過程中產(chǎn)生的誤差,因為計算機(jī)無法精確表示無限循環(huán)的小數(shù),要比較兩個小數(shù)是否相等,只能計算他們之差的絕對值,看是否小于某個閥值:
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true