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