区别:
==, 两边值类型不同的时候, 要先进行类型转换, 再比较
==, 不做类型转换, 类型不同的一定不等
下面分别说明:
先说 "===", 这个比较简单下面的规则用来判断两个值是否 === 相等:
1 如果类型不同, 就不相等
2 如果两个都是数值, 并且是同一个值, 那么 [相等];(! 例外) 的是, 如果其中至少一个是 NaN, 那么 [不相等](判断一个值是否是 NaN, 只能用 isNaN() 来判断)
3 如果两个都是字符串, 每个位置的字符都一样, 那么相等; 否则不相等
4 如果两个值都是 true, 或者都是 false, 那么相等
5 如果两个值都引用同一个对象或函数, 那么相等; 否则不相等
6 如果两个值都是 null, 或者都是 undefined, 那么相等
再说 "=="
如果两个值类型不同, 他们可能相等根据下面规则进行类型转换再比较:
a 如果一个是 null 一个是 undefined, 那么相等
b 如果一个是字符串, 一个是数值, 把字符串转换成数值再进行比较
c 如果任一值是 true, 把它转换成 1 再比较; 如果任一值是 false, 把它转换成 0 再比较
d 如果一个是对象, 另一个是数值或字符串, 把对象转换成基础类型的值再比较对象转换成基础类型, 利用它的 toString 或者 valueOf 方法 js 核心内置类, 会尝试 valueOf 先于 toString;
e 任何其他组合, 都不相等
总结:
也就是说 "==" 它是值之间的比较, 而:"===" 不仅仅是值之间的比较, 也是类型之间的比较, 一般在做项目的时候, 根据业务的不同我们决定用哪一个, 大多数开发人员习惯于 "==" 这样是不严谨的.
来源: http://www.bubuko.com/infodetail-2527197.html