JavaScript 中 == 和 === 運算子的區別
JavaScript 廣泛用於建立互動式網頁。它有許多框架,例如 React JS、Angular JS、Node JS 等。像任何其他程式語言一樣,JavaScript 也提供算術運算子、關係運算符、比較運算子等。等號運算子,即“==”,就是一個這樣的比較運算子,它檢查 LHS 是否等於 RHS。此運算子存在於所有其他程式語言中,但在 JavaScript 中略有不同。這是因為 JavaScript 是一種弱型別語言,而所有其他語言都是強型別語言。由於 JS 是弱型別的,它不會比較給定的兩個變數的型別。這可以用強制轉換的概念來解釋。
JavaScript 中的強制型別轉換
讓我們考慮一下,我們需要新增兩個變數“x”和“y”,它們的值分別為 2 和 3。我們將得到 5 作為輸出。但是如果我們將“x”與一個字串相加呢?讓我們假設我們將變數“x”與一個空字串“ ”相加。
為了執行操作,兩個值都應該是相同型別的。因此,當我們執行它時,JavaScript 將這兩個值都視為字串並連線它們。這種考慮取決於所使用的運算子的型別。
如果我們對兩個數字執行減法運算,其中一個是字串型別,那麼它不會將它們連線起來。它從另一個數字中減去一個數字。因此,我們可以說 JavaScript 根據所執行的操作隱式轉換資料型別。這稱為強制型別轉換。
現在,讓我們將此概念應用於雙等號 (==) 運算子。考慮兩個變數“x”和“y”,它們的值都是 3,但“x”變數中的“3”是字串型別。
x = "3" y = 3
假設我們比較“x”和“y”,即“x == y”。由於一個是字串型別,另一個是數字型別,我們期望輸出為false,就像在所有其他程式語言中一樣。但在 JavaScript 中,我們得到“true”。
這是因為 JavaScript 中的雙等號 (==) 不考慮型別,並使用強制轉換的概念將其中一個數據型別轉換為另一個數據型別,然後執行操作。但並非總是建議隱式轉換資料型別。
為了克服這個問題,我們使用三等號 (===) 代替雙等號。三等號運算子是強型別運算子,它考慮兩個變數的資料型別以便比較它們。
如果我們使用三等號來比較“x === y”,那麼我們將得到結果“false”。建議始終使用三等號運算子,因為它會給出正確的輸出。
現在讓我們來看幾個例子,以便更好地理解這個概念:
示例 1
如果我們比較兩個相同的字串,那麼雙等號和三等號都會輸出 true。
str1 = "example" str2 = "example" str1 == str2 // True str1 === str2 // True
示例 2
如果我們比較字串和數字,雙等號和三等號都會輸出 false。
str1 = "example" str2 = 3 str1 == str2 // False str1 === str2 // False
示例 3
如果我們比較兩個相同的數字,其中一個是字串型別,那麼雙等號 (==) 輸出 true,而三等號 (===) 輸出 false。
str1 = "7" str2 = 7 str1 == str2 // True str1 === str2 // False
示例 4
讓我們取兩個變數var1和var2,前者將“8”儲存為字串,後者值為 7。如果我們減去這兩個變數並將其與 1 進行比較,則雙等號和三等號都會輸出 true。當我們執行減法時,字串值會被 JavaScript 隱式轉換為數字型別。因此,結果的型別變為數字,兩者都輸出 true。
var1 = "8" var2 = 7 y = var1 – var2 y==1 // True y === 1 // True
示例 5
如果我們將零與 false 進行比較,雙等號 (==) 返回 true,而三等號 (===) 返回 false。
0 == False // True 0 === False // False
這是因為“0”和 false 的值相同,即 false。因此,雙等號會隱式轉換其中一個。而對於三等號,“0”是數字型別,false 是布林型別。因此,它輸出 false。
區別:JavaScript 中的雙等號 (==) 和三等號 (===)
下表重點介紹了 JavaScript 中雙等號 (==) 和三等號 (===) 的主要區別:
特性 |
雙等號 (==) |
三等號 (===) |
---|---|---|
功能 |
雙等號 (==) 只比較兩個變數的值,而不比較它們的資料型別。 |
三等號 (===) 檢查兩個變數的值和資料型別。 |
強制型別轉換 |
它遵循強制型別轉換的概念。 |
它不遵循強制型別轉換的概念。 |
型別轉換 |
它隱式轉換型別以執行操作。 |
它不會轉換它們原來的資料型別。 |
弱型別或強型別 |
它是弱型別的。 |
它是強型別的。 |
結論
雙等號和三等號是 JavaScript 中的比較運算子,用於比較給定的兩個變數或值是否相等。雙等號 (==) 運算子是弱型別的,因此它只比較值。相反,三等號 (===) 運算子是強型別的,因此它會考慮它們的資料型別以及值。