JS中==的判断原理
判断规则
遇到两个操作数不同类型时会先尝试着转换成相同的类型再比较,其转换规则如下:
1、只要有一个操作数是布尔值,则先将该布尔值转成数字类型,(false => 0, true => 1);
2、如果一个操作数是字符串,另一个是数字类型,则把字符串转成数字类型;
3、有一个操作数是对象的话,另一个不是,则尝试着将对象转成基本类型值。(一般情况下会依次调用valueOf,和toString,只要能得到基本类型值即可);
4、两个操作数都是对象的话,则比较它们是不是指向同一个对象即可;
5、操作数是null 或 undefined 的话不进行转换;
每条规则之间都是一定的联系的。
如果有一个操作数是 false,那么另一个操作数就是 字符串,数字类型,null,undefined,对象的其中一种(当然也可能也是布尔值),这时匹配到第1条规则,二话不说先将false转成数字0,那么就变成了下面这几种可能的情况:
0 == 字符串 (匹配到第2条规则)
0 == 数字类型 (直接比较了)
0 == null,undefined (匹配到第5条规则)
0 == 对象 (匹配到第3条规则)
每条规则都可能是由其他规则推算出来的,每一条规则并非都是独立的,JS规定null和undfined永远相等,因为undfined是null衍生出来的。