1. 程式人生 > >JS比較運算子及null和Undefined區別

JS比較運算子及null和Undefined區別

比較運算子

當我們對Number做比較時,可以通過比較運算子得到一個布林值:

2 > 5; // false
5 >= 2; // true
7 == 7; // true

實際上,JavaScript允許對任意資料型別做比較:

false == 0; // true
false === 0; // false

要特別注意相等運算子==。JavaScript在設計時,有兩種比較運算子:

第一種是==比較,它會自動轉換資料型別再比較,很多時候,會得到非常詭異的結果;

第二種是===比較,它不會自動轉換資料型別,如果資料型別不一致,返回false,如果一致,再比較。

由於JavaScript這個設計缺陷,不要

使用==比較,始終堅持使用===比較。

另一個例外是NaN這個特殊的Number與所有其他值都不相等,包括它自己:

NaN === NaN; // false

唯一能判斷NaN的方法是通過isNaN()函式:

isNaN(NaN); // true

最後要注意浮點數的相等比較:

1 / 3 === (1 - 2 / 3); // false

這不是JavaScript的設計缺陷。浮點數在運算過程中會產生誤差,因為計算機無法精確表示無限迴圈小數。要比較兩個浮點數是否相等,只能計算它們之差的絕對值,看是否小於某個閾值:

Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

null和undefined

null表示一個“空”的值,它和0以及空字串''不同,0是一個數值,''表示長度為0的字串,而null表示“空”。

在其他語言中,也有類似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。但是,在JavaScript中,還有一個和null類似的undefined,它表示“未定義”。

JavaScript的設計者希望用null表示一個空的值,而undefined表示值未定義。事實證明,這並沒有什麼卵用,區分兩者的意義不大。大多數情況下,我們都應該用nullundefined僅僅在判斷函式引數是否傳遞的情況下有用。

結果截圖: