判斷兩個變數是否相等是程式設計中非常重要的運算。在處理原始值時,這種運算相當簡單,但設計對象,任何就稍微有點複雜。JavaScript提供了兩套運算子處理這個問題,等號和非等號使用者處理原始值;全等號和非全等號用於處理對象。
在JavaScript中,等號由雙等號(==)表示,若且唯若兩個運算數相等時,它返回true。非等號是驚嘆號加等號(!=),若且唯若兩個運算數不相等時,它返回true。為確定兩個運算數是否相等,這兩個運算子都會進行類型轉換。
執行類型轉換的基本規則如下:
如果一個運算數是Boolean值,在檢查相等性之前,把它轉換成數字值。false轉換成0,true轉換成1。
如果一個運算數是字串,另一是數字,在檢查相等性之前,要嘗試把字串轉換成數字。
如果一個運算數是對象,另一個是字串,在檢查相等性之前,要嘗試把對象轉換成字串(調用toString()方法)。
如果一個運算數是對象,另一是數字,在檢查相等性之前,要嘗試把對象轉換成數字。
在進行比較時,該運算子還遵守下列規則:
值null和undefined相等。
在檢查相等性時,不能把null和undenfined轉換成其他值。
如果某個運算數是NaN,等號將返回false,非等號將返回true。重要提示:即使連個運算數都是NaN,等號仍然返回false,因為根據規則,NaN不等於NaN。
如果兩個運算數都是對象,那麼比較的是他們的引用值。如果兩個運算數指向同一個對象,那麼等號返回true,否則兩個運算數不等。
下面的比較列出了一些特殊的情況以及它們的結果:
null == undefined //結果為:true
"NaN" == NaN //結果為:false
5== NaN //結果為:false
NaN == NaN //結果為:false
NaN != NaN //結果為:true
false == 0 //結果為:true
true == 1 //結果為:true
true == 2 //結果為:false
undefined == 0 //結果為:false
null == 0 //結果為:false
"5" == 5 //結果為:true