JavaScript 比較應使用哪一個等於運算子(== 與 ===)?
P粉023650014
2023-08-23 12:29:52
<p>我正在使用JSLint 來瀏覽JavaScript,它返回許多建議,將<code>==</code> (兩個等號)替換為<code>===</code> (三個等號)在執行諸如在<code>if</code> 語句內比較<code>idSele_UNVEHtype.value.length == 0</code> 等操作時。 </p>
<p>將 <code>==</code> 替換為 <code>===</code> 是否有效能優勢? </p>
<p>任何效能改進都會受到歡迎,因為有許多比較運算子。 </p>
<p>如果不進行型別轉換,是否會比 <code>==</code> 獲得效能提升? </p>
使用
==
運算子(相等)使用
===
運算子(Identity)這是因為相等運算子
==
會進行型別強制轉換,這表示解譯器會在比較之前隱式嘗試轉換值。另一方面,恆等運算子
===
不會進行型別強制,因此在比較時不會轉換值。嚴格相等運算子(
===
) 的行為與抽象相等運算子(==
) 相同,只是不進行型別轉換,且型別必須是相同的被認為是平等的。參考:JavaScript 教學:比較運算子
#==
運算子將在進行任何必要的型別轉換後比較是否相等。===
運算子不會進行轉換,因此如果兩個值不是相同類型,===
將簡單地傳回假
。兩者都一樣快。引用 Douglas Crockford 的精彩內容JavaScript:好的部分一个>,
更新
@Casebash 在評論和@Phillipe Laybaert 的 關於物件的答案。對於對象,
==
和===
彼此行為一致(特殊情況除外)。特殊情況是當您將一個基元與一個計算結果為相同基元的物件進行比較時,由於其
toString
或valueOf
方法。例如,考慮將字串基元與使用String
建構函數建立的字串物件進行比較。這裡
==
運算子檢查兩個物件的值並傳回true
,但是===
看到它們類型不同並傳回false
。哪一個是正確的?這實際上取決於您要比較的內容。我的建議是完全繞過這個問題,只是不要使用String
建構子從字串文字建立字串物件。參考
https://262.ecma-international.org/5.1/#sec-11.9 .3