JavaScript === vs ==
比較運算子幫助我們確定兩個變數是否相等或遵循指定的標準。如果比較結果良好,則返回 true
;否則,它返回 false
。本教程解釋了比較運算子中最令人困惑的話題,並教授何時使用哪個等於運算子(==
或 ===
)。
單等號 =
與雙等號 ==
和三等號 ===
完全不同,因為它是一個賦值操作,它們是比較運算子。因此,混淆通常在 ==
和 ===
之間。
JavaScript 中的鬆散相等運算子 (==
)
==
運算子或相等運算子也稱為抽象比較運算子。之所以稱為抽象,是因為它只關心變數的值而不關心變數的型別。==
運算子在將變數值相互比較之前將它們轉換為相同的型別(型別強制),如果轉換的運算元相等,則返回 true。由於運算子必須執行型別轉換,因此它往往比 ===
運算子慢一點。
現在,要了解何時使用哪個運算子,我們首先必須瞭解一些有關型別強制的知識。它有兩種型別:
- 顯式強制轉換: 使用內建方法通過程式碼顯式完成。例如:要將字串
"42"
轉換為數字,我們必須編寫Number("42")
。這樣,我們使用顯式的Number()
型別轉換方法將字串轉換為數字。 - 隱式強制轉換: 它是由語言隱式完成的。它通常在我們將兩種不同型別的運算元與運算子一起使用時執行。例如:如果我們執行
1 + ""
。有一個數字和一個字串不能直接相加,所以 JavaScript 型別將數字轉換為字串,因為這是它們相加的唯一方式,並返回一個字串"1"
。
23 == "23" // returns true
true + false == 1 // returns true
undefined == null // returns true
[] == 0 // returns true
JavaScript 中的嚴格相等運算子 (===
)
===
運算子或恆等運算子也稱為嚴格比較運算子。之所以稱為嚴格,是因為它只有在兩個運算元的型別和值都相同時才返回真。它不執行任何型別的轉換;因此,它往往比 ==
運算子更快。
true === true // returns true
true === 1 // returns false
因此,選擇 ==
或 ===
運算子的決定取決於型別強制。如果不熟悉型別強制,那麼他應該堅持使用嚴格相等運算子。
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn