首先我们先来说一下相等的概念:
我们知道可以使用==或===判断两个值的相等性,其中区别相信大家清楚,===是严格相等的意思,只需要注意NaN和NaN不等就行了。而使用==的时候,JavaScript会帮我们做类型转换,造成一些匪夷所思的结果,那么使用==的时候会在那些情况下做类型转换,又会换成什么样子呢?
- 如果两个值类型相同,则执行严格相等的运算
- 如果两个值的类型不同,那么就好玩了,看下面吧
1、如果一个是null,一个是undefined,那么相等(可以硬背下来)
2、如果一个是数字,一个是字符串,先将字符串转位数字,然后在比较
3、如果一个值是true/false则将其转为1/0比较
4、如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
5、其他就不相等了
看着判断if(xx)和a==b比较难记,其实可以总结为三句话:
- 空字符串是false
- 其他都是true
- 对象全是true