技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

【實例】詳解JS中==和===、!=和!==的使用區(qū)別

作者:admin    時間:2022-5-24 23:15:39    瀏覽:

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

 詳解JS中==和===、!=和!==的使用區(qū)別

==和===之間的區(qū)別

=====的區(qū)別在于:

  • == 在執(zhí)行比較之前將變量值轉(zhuǎn)換為相同的類型。這稱為類型強(qiáng)制。
  • === 不進(jìn)行任何類型轉(zhuǎn)換(強(qiáng)制),并且僅當(dāng)被比較的兩個變量的值和類型都相同時才返回true 。

何時在 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因為兩個變量oneone_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)算符:!=!==

  • !=: 如果變量是不同類型,則在檢查不等式之前轉(zhuǎ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)算符。像ArraysObjects這樣的引用類型呢?如果我們創(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ā)生的是a1a2指向內(nèi)存中的不同對象。盡管數(shù)組內(nèi)容相同,但它們本質(zhì)上具有不同的值。同樣適用于對象和其他引用類型。

總結(jié)

通過前面的簡單示例說明,現(xiàn)在你應(yīng)該了解和懂得 JavaScript 中 “==”和“===” 運(yùn)算符以及“!=”和“!==”不等號的區(qū)別了吧,最主要是要清楚何時使用哪一個。

您可能對以下文章也感興趣

標(biāo)簽: 雙等號  三等號  ==  ===  
相關(guān)文章
    x
    • 站長推薦
    /* 左側(cè)顯示文章內(nèi)容目錄 */