(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,则它们不相等。