参考:
https://www.cnblogs.com/nelson-hu/p/7922731.html
https://blog.csdn.net/weixin_41530824/article/details/84783796
https://www.runoob.com/js/js-operators.html
定义
== 等值符:值相等 -> true
- 如果两个值类型相同,直接比较值是否相等。
- 如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:
如果一个是null,一个是undefined,那么相等;
如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较。 - NaN 和所有值包括自己都不相等,即 NaN==NaN //返回false。
=== 等同符:类型和值均相等 -> true
- 如果类型不同,就一定不相等。
- 如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用 isNaN( ) 来判断)。
- 如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。
- 如果两个值都是true,或是false,那么相等。
- 如果两个值都引用同一个对象或是函数,那么相等,否则不相等。
- 如果两个值均是null或均是undefined,那么相等;如果一个是null,一个是undefined,则不相等(因为 null 和 undefined 的值相等,类型不等)。
区别
1、对于 Number、String、Boolean 等基础类型,== 和 === 是有区别的。
- 不同类型间比较,== 比较 “转化成同一类型后的值” 看 “值” 是否相等,=== 如果类型不同,其结果就是不等
- 同类型比较,直接进行 “值” 比较,两者结果一样
2、对于 Array、Object 等高级类型,== 和 === 是没有区别的。
- 进行 “指针地址” 比较
3、基础类型与高级类型,== 和 === 是有区别的。
- 对于 ==,将高级转化为基础类型,进行 “值” 比较
- 对于 ===,因为类型不同,其结果为 false