为什么 (null == false) 和 (null == true) 都返回 false?

2022-01-19 00:00:00 null boolean javascript

我知道 null 是一个没有属性或函数的对象.

I know that null is an object with no attributes or functions.

但是,我很困惑为什么 console.log(null == false);console.log(null == true); 都返回 false.

However, I am confused that why console.log(null == false); and console.log(null == true); both return false.

nullboolean之间的转换规则是什么?

What are the conversion rules between null and boolean?

推荐答案

这是因为抽象等式比较算法要求如果 Type(x)Type(y) 是表达式 x == y 中的布尔值 那么布尔值应该通过 ToNumber,将 true 转换为 1,将 false 转换为 +0.

This is because the Abstract Equality Comparison Algorithm requires that if Type(x) or Type(y) is a Boolean in the expression x == y then the Boolean value should be coerced to a number via ToNumber, which converts true to 1 and false to +0.

这意味着 true == somethingsomething == true 的任何比较都会导致 1 == somethingsomething== 1(将 true1 替换为 false+0 替换 false).

This means that any comparison of true == something or something == true results in 1 == something or something == 1 (replacing true and 1 with false and +0 for false).

Null 类型 比较不等于 1 或 +0(实际上, null 只能与抽象等式比较算法中的undefined比较).

The Null type does not compare as equal to either 1 or +0 (in fact, null is only comparable to undefined in the Abstract Equality Comparison Algorithm).

在 MDN 如果您想了解更多,非常值得一看.

There is a detailed discussion of all of the different kinds of equality in JavaScript on MDN that is well worth looking at if you want to know more.

但是,如果你将 null 强制为一个数字,它会强制为 +0 所以 +null == false 实际上返回 true.

However, if you coerce null to a number it is coerced to +0 so +null == false actually returns true.

相关文章