根据我们的印象中js进行两个不同类型的人会进行隐式类型转换。
我们知道Number(null) => 0。
可是为什么 0 == null 等于 false呢?
原因是这样的,在es规范中我找到了==算法的实现细节:
1、如果x不是正常值(比如抛出一个错误),中断执行。
2、如果y不是正常值,中断执行。
3、如果Type(x)与Type(y)相同,执行严格相等运算x === y。
4、如果x是null,y是undefined,返回true。
5、如果x是undefined,y是null,返回true。
6、如果Type(x)是数值,Type(y)是字符串,返回x == ToNumber(y)的结果。
7、如果Type(x)是字符串,Type(y)是数值,返回ToNumber(x) == y的结果。
8、如果Type(x)是布尔值,返回ToNumber(x) == y的结果。
9、如果Type(y)是布尔值,返回x == ToNumber(y)的结果。
10、如果Type(x)是字符串或数值或Symbol值,Type(y)是对象,返回x == ToPrimitive(y)的结果。
11、如果Type(x)是对象,Type(y)是字符串或数值或Symbol值,返回ToPrimitive(x) == y的结果。
12、返回false。
当前面的条件都匹配不上的时候,就返回false;
0 == null 的情况在前面11种情况中都没有匹配上,所以 0 == null 等于 false
作者:老猫爱打盹
链接:https://www.zhihu.com/question/52666420/answer/132231109
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。