判斷兩個變數是否相等是程式設計中非常重要的運算。在處理原始值時,這種運算相當簡單,但涉及對
象,任務就稍有點複雜。ECMAScript提供了兩套運算子處理這個問題,等號和非等號用於處理原始值,
全等號和非全等號用於處理對象。
1. 等號和非等號
在ECMAScript中,等號由雙等號(= =)表示,若且唯若兩個運算數相等時,它返回true。非等號是感
歎號加等號(!=),若且唯若兩個運算數不相等時,它返回true。為確定兩個運算數是否相等,這兩個
運算子都會進行類型轉換。
執行類型轉換的基本規則如下:
q 如果一個運算數是Boolean值,在檢查相等性之前,把它轉換成數字值。false轉換成0,true轉換成
1。
q 如果一個運算數是字串,另一個是數字,在檢查相等性之前,要嘗試把字串轉換成數字。
q 如果一個運算數是對象,另一個是字串,在檢查相等性之前,要嘗試把對象轉換成字串(調用
toString()方法)。
q 如果一個運算數是對象,另一個是數字,在檢查相等性之前,要嘗試把對象轉換成數字。
在進行比較時,該運算子還遵守下列規則:
q 值null和undefined相等。
q 在檢查相等性時,不能把null和undefined轉換成其他值。
q 如果某個運算數是NaN,等號將返回false,非等號將返回true。重要提示:即使兩個運算數都是NaN
,等號仍然返回false,因為根據規則,NaN不等於NaN。
q 如果兩個運算數都是對象,那麼比較的是它們的引用值。如果兩個運算數指向同一個對象,那麼等
號返回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
2. 全等號和非全等號
等號和非等號的同類運算子是全等號和非全等號。這兩個運算子所做的與等號和非等號相同,只是它們
在檢查相等性前,不執行類型轉換。全等號由三個等號(= = =)表示,只有在無需類型轉換運算數就
相等的情況下,才返回true。例如:
在這段代碼中,第一個警告使用等號比較字串"55"和數字55,輸出"true"。如前所述,這是因為字元
串"55"將被轉換成數字55,然後才與另一個數字55進行比較。第二個警告使用全等號在沒有類型轉換的
情況下比較字串和數字,當然,字串不等於數字,所有輸出"false"。
非全等號由驚嘆號加兩個等號(!= =)表示,只有在無需類型轉換運算數不相等的情況下,才返回true
。例如:
這裡,第一個警告使用非等號,把字串"55"轉換成數字55,使得它與第二個運算數55相等。因此,計
算結果為false,因為兩個運算數被看作是相等的。第二個警告使用的是非全等號。該運算是在問:
“sNum與iNum不同嗎?”這個問題的答案是:“是的(true)”,因為sNum是字串,而iNum是數字,
它們當然不同。