|
|
|
|
|
|
JavaScript條件判斷中,雙等號“==”和三等號“===”都是用來比較兩者是否相等的符號,多數情況下,我們都是用“==”,但是有時我們也看到有人用“===”,我之前也不太詳究,認為使用“==”就足夠了,完全用不到“===”。其實,這種想法是不對的,編寫程序應該是嚴謹的,使用“===”肯定有它的理由,并且是“==”不可代替的。今天,我又看到了有個實例代碼里使用了“===”,我決定認真學習一下,了解和懂得“==”與“===”的使用區別。

==和===之間的區別
==和===的區別在于:
何時在 JavaScript 中使用 ==?
Javascript 中的雙等號 (==) 類似于三等號 (===) 運算符,因為它們被視為比較運算符。但是,==(雙重相等)運算符用于查找抽象相等。這意味著雙等號 (==) 執行類型轉換以供使用,然后比較兩個值。
下面的示例將返回 true,因為雙等號運算符將執行稱為類型強制的操作,將兩個值轉換為相同的類型并進行比較。
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是字符串,但是由于==操作符進行了類型轉換,所以結果為true。
第 8 行:console.log(one === one_string)返回false,因為兩個變量的類型不同。
何時使用此運算符取決于你的程序。如果你預見到類型轉換會破壞代碼,你可能需要使用(===) 運算符。
何時在 JavaScript 中使用 ===?
三等號 (===) 運算符在 JavaScript 中被認為是嚴格的比較運算符。當你想要比較兩個值并考慮類型時,你將使用此運算符。使用前面的示例,你會得到相反的響應。
if (100 === '100') {
//等式不成立
}===比==快嗎?
理論上,當比較具有相同類型的變量時,兩個運算符的性能應該相似,因為它們使用相同的算法。當類型不同時,三等號運算符 ( ===) 應該比雙等號 ( ==) 執行得更好,因為它不必執行類型強制的額外步驟。
但是如果你仔細想想,性能是完全無關緊要的,不應該在決定何時使用一個運算符而不是另一個時發揮作用。要么你需要類型強制,要么你不需要。如果你不需要它,請不要使用雙等號運算符 ( ==),因為你可能會得到意想不到的結果。例如,"1" == true或"" == 0將返回true,再如下面的示例:
0 == false // true
0 === false // false 它們類型不同
1 == "1" // true 類型被強制轉換
1 === "1" // false 它們類型不同
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
簡而言之,除非你需要類型強制(在這種情況下,請使用==) ,否則請始終在任何地方都使用===。
不等式運算符:!= 和 !==
與雙等號和三等號對應的,是這兩個不等式運算符:!= 和 !==:
示例
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. 類型不同
相等運算符和對象(以及其他引用類型)
到目前為止,我們一直在探索使用原始類型的等式或不等式運算符。像Arrays或Objects這樣的引用類型呢?如果我們創建兩個具有相同內容的數組,我們是否可以使用相等運算符來比較它們?答案是否定的,你不能。我們來看一個例子:
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。這里發生的是a1都a2指向內存中的不同對象。盡管數組內容相同,但它們本質上具有不同的值。同樣適用于對象和其他引用類型。
總結
通過前面的簡單示例說明,現在你應該了解和懂得 JavaScript 中 “==”和“===” 運算符以及“!=”和“!==”不等號的區別了吧,最主要是要清楚何時使用哪一個。
