絕大多數場合應該使用=== ,只有檢測null/undefined 的時候可以使用x == null ,因為通常我們不區分null 和undefined ,即將x == null 作為x === null || x == = undefined 的縮寫。
== 的比較看似會比較方便,例如 1 == '1' ,但是會埋下隱患,例如可能對類型做出錯誤的假設。
範例:
if (x == 10) x += 5 www.2cto.com
如果傳入的x是字串'10',x的結果會變成'105'。在後續運算中字串'105'又可能被轉型,從而引入隱藏的錯誤。
另外,程式設計師可能不自覺的依賴某些假設-例如相等比較應該具有傳遞性,即 a = b, b = c,應該能得出 a = c。但是JavaScript的 == 不具有傳遞性。例如 0 == '0' ,0 == '',但是 '0' != '' 。
所以 JS的 == 並非是 Java/C# 的 equals() ,因為 Java/C# 語言都是要求 equals() 必須保證傳遞性的。
總之,對於大型程式來說,== 的這點小小的便利性無法與帶來的風險相比。
建議:
忘記==, 只用===。 ==是個design失誤。它會嘗試進行類型轉換(不是java的equal,它是well defined),類型轉換的規則不好記。並且還破壞傳遞性。
只用===,! ==,寫javascript的日子會舒服一點