判斷兩個變數是否相等是程式設計中非常重要的運算,若是對原始值進行運算,則比較簡單,但涉及到對象,則有點複雜.
ECMAScript提供了兩套運算子處理這個問題:
1.等號和非等號
等號由==表示.若且唯若兩個運算數相等時,才返回true.
非等號由!=表示.若且唯若兩個運算數不相等時,它返回false.
為了確定運算數是否相等,這兩個運算子都會進行類型轉換.類型轉換基本規則如下:
- 如果一個運算數是Boolean值,在檢查相等性之前,會把它轉換成數字值.true轉換為1,false轉換為0.
- 如果一個運算數是數字,另一個運算數是字串,則嘗試將字串轉換為數字.
- 如果一個運算數是數字,另一個運算數是對象,則嘗試將對象轉換為數字.
- 如果一個運算數是字串,另一個運算數是對象,則嘗試將對象轉換為字串.
- 不能將null和undefined轉換成其他類型值.
運算子在進行比較時,遵循以下規則:
- 值null與undefined相等
- 如果某個運算數是NaN,等號返回false,非等號返回true.即使兩個運算數都是NaN,等號仍返回false
- 如果兩個運算數都是對象,則比較的是它們的引用值.
對一些特殊值進行比較,前提代碼:
function display(value){ document.write(value+"<br/>"); } var obj1 = new Object(); var obj2 = new Object(); var obj3 = obj1;
結果:
比較式 |
結果 |
1=="1" |
true |
1==false |
false |
1==true |
true |
2==true |
false |
null==undefined |
true |
1==NaN |
false |
NaN==NaN |
false |
NaN!=NaN |
true |
obj1==obj2 |
false |
obj1==obj3 |
true |
2.全等號和非全等號
全等號由===表示.只有在無需類型轉換運算數的情況下,才返回true.
非全等號由!==表示.
例子,前提代碼:
function display(value){ document.write(value+"<br/>"); } var obj1 = new Object(); var obj2 = new Object(); var obj3 = obj1;
結果:
比較式 |
結果 |
1==="1" |
false |
1===false |
false |
1===true |
false |
2===true |
false |
null===undefined |
false |
1===NaN |
false |
NaN===NaN |
false |
NaN!==NaN |
true |
obj1===obj2 |
false |
obj1===obj3 |
true |