|
|
|
|
|
JavaScript條件判斷中,雙等號“==
”和三等號“===
”都是用來比較兩者是否相等的符號,多數(shù)情況下,我們都是用“==
”,但是有時我們也看到有人用“===
”,我之前也不太詳究,認(rèn)為使用“==
”就足夠了,完全用不到“===
”。其實,這種想法是不對的,編寫程序應(yīng)該是嚴(yán)謹(jǐn)?shù)?,使?ldquo;===
”肯定有它的理由,并且是“==
”不可代替的。今天,我又看到了有個實例代碼里使用了“===
”,我決定認(rèn)真學(xué)習(xí)一下,了解和懂得“==
”與“===
”的使用區(qū)別。
==和===之間的區(qū)別
==
和===
的區(qū)別在于:
何時在 JavaScript 中使用 ==?
Javascript 中的雙等號 (==
) 類似于三等號 (===
) 運(yùn)算符,因為它們被視為比較運(yùn)算符。但是,==
(雙重相等)運(yùn)算符用于查找抽象相等。這意味著雙等號 (==
) 執(zhí)行類型轉(zhuǎn)換以供使用,然后比較兩個值。
下面的示例將返回 true,因為雙等號運(yùn)算符將執(zhí)行稱為類型強(qiáng)制的操作,將兩個值轉(zhuǎn)換為相同的類型并進(jìn)行比較。
if (100 == '100') {
//等式成立
}
再看下面一個示例
var one = 1;
var one_again = 1;
var one_string = "1"; // 注:這是一個字符串
console.log(one == one_again); // true
console.log(one === one_again); // true
console.log(one == one_string); // true. 看下面解釋.
console.log(one === one_string); // false. 看下面解釋.
第 7 行:console.log(one == one_string)
返回true因為兩個變量one
和one_string
包含相同的值,即使它們具有不同的類型:one
的類型是Number,而one_string
是字符串,但是由于==
操作符進(jìn)行了類型轉(zhuǎn)換,所以結(jié)果為true。
第 8 行:console.log(one === one_string)
返回false,因為兩個變量的類型不同。
何時使用此運(yùn)算符取決于你的程序。如果你預(yù)見到類型轉(zhuǎn)換會破壞代碼,你可能需要使用(===
) 運(yùn)算符。
何時在 JavaScript 中使用 ===?
三等號 (===
) 運(yùn)算符在 JavaScript 中被認(rèn)為是嚴(yán)格的比較運(yùn)算符。當(dāng)你想要比較兩個值并考慮類型時,你將使用此運(yùn)算符。使用前面的示例,你會得到相反的響應(yīng)。
if (100 === '100') {
//等式不成立
}
===比==快嗎?
理論上,當(dāng)比較具有相同類型的變量時,兩個運(yùn)算符的性能應(yīng)該相似,因為它們使用相同的算法。當(dāng)類型不同時,三等號運(yùn)算符 ( ===
) 應(yīng)該比雙等號 ( ==
) 執(zhí)行得更好,因為它不必執(zhí)行類型強(qiáng)制的額外步驟。
但是如果你仔細(xì)想想,性能是完全無關(guān)緊要的,不應(yīng)該在決定何時使用一個運(yùn)算符而不是另一個時發(fā)揮作用。要么你需要類型強(qiáng)制,要么你不需要。如果你不需要它,請不要使用雙等號運(yùn)算符 ( ==
),因為你可能會得到意想不到的結(jié)果。例如,"1" == true
或"" == 0
將返回true,再如下面的示例:
0 == false // true
0 === false // false 它們類型不同
1 == "1" // true 類型被強(qiáng)制轉(zhuǎn)換
1 === "1" // false 它們類型不同
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
簡而言之,除非你需要類型強(qiáng)制(在這種情況下,請使用==
) ,否則請始終在任何地方都使用===
。
不等式運(yùn)算符:!= 和 !==
與雙等號和三等號對應(yīng)的,是這兩個不等式運(yùn)算符:!=
和 !==
:
示例
var one = 1;
var one_again = 1;
var one_string = "1"; // 注: 這是一個字符串
console.log(one != one_again); // false
console.log(one != one_string); // false
console.log(one !== one_string); // true. 類型不同
相等運(yùn)算符和對象(以及其他引用類型)
到目前為止,我們一直在探索使用原始類型的等式或不等式運(yùn)算符。像Arrays
或Objects
這樣的引用類型呢?如果我們創(chuàng)建兩個具有相同內(nèi)容的數(shù)組,我們是否可以使用相等運(yùn)算符來比較它們?答案是否定的,你不能。我們來看一個例子:
var a1 = [1,2,3,4,5]
var a2 = [1,2,3,4,5]
console.log(a1 == a2); // false
console.log(a1 === a2); // false
在這里, ==
和===
返回相同的答案:false。這里發(fā)生的是a1都a2指向內(nèi)存中的不同對象。盡管數(shù)組內(nèi)容相同,但它們本質(zhì)上具有不同的值。同樣適用于對象和其他引用類型。
總結(jié)
通過前面的簡單示例說明,現(xiàn)在你應(yīng)該了解和懂得 JavaScript 中 “==
”和“===
” 運(yùn)算符以及“!=
”和“!==
”不等號的區(qū)別了吧,最主要是要清楚何時使用哪一個。