JavaScript中有兩種比較相等的運算符:== 和 ===。這兩個運算符在使用時很容易混淆。他們都可以用來測試兩個值是否相等,但是在比較時卻存在很大差異,本文就來詳細分析這兩個運算符的不同之處。
在JavaScript中,== 運算符稱為等于運算符,它的作用是判斷兩個值是否相等。如果兩個值的類型不一樣,那么它們會嘗試被轉換為相同的類型然后進行比較。例如:
1 == "1"; // true,"1"被轉換為數字1 0 == "0"; // true,"0"被轉換為數字0 true == 1; // true null == undefined; // true
然而,由于類型轉換可能會出現一些讓人意外的結果:
" " == 0; // true " " == false; // true
此時,我們就會不經意間犯下這樣的錯誤:
if(value == true){ // ... }
這個判斷語句會將0、""、null、undefined、false等值都當做false來處理,而只有true、非空字符串以及非零數字才會被當做true來處理。
與之對應的全等運算符===被稱為嚴格等于運算符,它與等于運算符的差別在于它不會進行類型轉換,也就是說,只有當兩個值的類型相同并且值相等時返回true,否則返回false。
1 === "1"; // false 0 === "0"; // false true === 1; // false null === undefined; // false
因此,在使用時,我們應該優先使用===運算符。
那么===運算符的使用會不會帶來一些細節問題呢?答案是肯定的。例如,由于JavaScript中false、0和""在條件語句中都會被轉化成false,所以如果使用===時需要非常謹慎。比如:
if(value === true){ // ... }
如果value是0或者'',那么這個判斷語句會返回false。
需要注意的是,typeof運算符返回的值可能會讓一些同學摸不著頭腦:
typeof null; // 輸出"object" typeof []; // 輸出"object" typeof {}; // 輸出"object" typeof new Date(); // 輸出"object"
對于以上情況,我們也可以使用全等運算符進行判斷:
null === null; // 輸出true [] === null; // 輸出false {} === null; // 輸出false
因此,在JS編碼中,不管是==還是===都應該多加留意,及時修復或改進代碼中的錯誤,提高代碼的魯棒性。