为什么 (null == false) 和 (null == true) 都返回 false?
我知道 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.
null
和boolean
之间的转换规则是什么?
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 == something
或 something == true
的任何比较都会导致 1 == something
或 something== 1
(将 true
和 1
替换为 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
.
相关文章