(1) 百度知道上的解釋:
= 爲對象賦值
== 表示兩個對象toString值相等
=== 表示兩個對象類型相同且值相等
(2) 知乎上的解釋:
絕大多數場合應該使用 === ,只有檢測 null/undefined 的時候能夠使用 x == null ,由於一般咱們不區分 null 和 undefined ,即將 x == null 做爲 x === null || x === undefined 的縮寫。
== 的比較看似會比較方便,好比 1 == '1' ,可是會埋下隱患,好比可能對類型作出錯誤的假設。
例子: if (x == 10) x += 5
若是傳入的x是字符串'10',x的結果會變成'105'。在後續運算中字符串'105'又可能被轉型,從而引入隱蔽的錯誤。
另外,程序員可能不自覺的依賴某些假設——好比相等比較應該具備傳遞性,即 a = b, b = c,應該能得出 a = c。可是JavaScript的 == 不具備傳遞性。好比 0 == '0' ,0 == '',可是 '0' != '' 。
因此 @李遙 的說法也是錯誤的,JS的 == 並不是是 Java/C# 的 equals() ,由於 Java/C# 語言都是要求 equals() 必須保證傳遞性的。
總之,對於大型編程來講,== 的這點小小的便利性沒法與其帶來的風險相比。
(3) CSDN上的解釋:
JavaScript支持「=」、「==」和「===」運算符。你應當理解這些(賦值、相等、恆等)運算符之間的區別,並在編碼過程當中當心使用。
JavaScript對象的比較是引用的比較,而不是值的比較。對象和其自己是相等的,但和其餘任何對象都不相等。若是兩個不一樣的對象具備相同數量的屬性,相同的屬性名和值,它們依然是不相等的。相應位置的數組元素是相等的兩個數組也是不相等的。
嚴格相等運算符「===」首先計算其操做數的值,而後比較這兩個值,比較過程沒有任何類型轉換:
若是兩個值類型不相同,則它們不相等。
若是兩個值都是null或者都是undefined,則它們不相等。