(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,则它们不相等。
JavaScript的=、==和===,布布扣,bubuko.com
原文:http://www.cnblogs.com/cookray/p/3617292.html