三等於運算符

引言 javascript

在javascript中,你可能會寫出如下兩段代碼: java


if (x == y) {
	// do something here
}
或者



if (x === y) {
	// do something here
}
這兩端代碼的區別是:第二段代碼使用了三等於運算符,也稱爲嚴格至關或恆等於運算符。對於Javascript初學者來講,可能提倡使用三等於運算符,不用雙等運算符。但就是不明白爲何,他們二者的區別又是什麼?


二者區別 瀏覽器

在使用雙等運算符的比較中,若是被比較的兩個值相等,將返回true(真)。但有種狀況:在類型不一樣的兩個值之間比較時,就會發生強制轉換。每一個JavaScript值屬於一個特定的「類型」。這些類型是:數字,字符串,布爾值,函數和對象。因此,若是你嘗試用字符串(string)和數字(number)進行比較,瀏覽器在比較以前,就會嘗試把字符串轉換成數字,再進行比較。一樣,若是用真(true)或假(false)與數字(number)進行比較,它會把真或假轉化爲1或0 。 函數

這會帶來不可預知的後果,下面是一些例子: 測試

console.log(99 == "99"); // true  
console.log(0 == false); // true
儘管看起來沒有問題,但它能夠引發麻煩,例如:
console.log(' \n\n\n' == 0); // true  
console.log(' ' == 0); // true
鑑於此,多數javascript專家建議使用三等運算符,不用雙等運算符。由於三等運算符歷來不會強制類型轉換。這意味着:使用三等運算符,上面四個例子將會獲得正確的結果。
console.log(99 === "99"); // false
console.log(0 === false); // false
console.log(' \n\n\n' === 0); // false
console.log(' ' === 0); // false
不等於又是什麼狀況?

此次用不等於測試上面的例子: spa

console.log(99 != "99"); // false
console.log(0 != false); // false
console.log(' \n\n\n' != 0); // false
console.log(' ' != 0); // false
注意,每一個例子的最終結果都應該是真(true),但事實相反,由於受到了強制轉換的影響。

若是改爲雙等運算符,將獲得正確的結果: code

console.log(99 !== "99"); // true
console.log(0 !== false); // true
console.log(' \n\n\n' !== 0); // true
console.log(' ' !== 0); // true
總結

建議老是使用嚴格相等運算符,這將有助於你的代碼保持數據完整性。 對象

相關文章
相關標籤/搜索