Why (null == false) and (null == true) both return false?(为什么 (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.
这篇关于为什么 (null == false) 和 (null == true) 都返回 false?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么 (null == false) 和 (null == true) 都返回 false?
基础教程推荐
- Bootstrap 模态出现在背景下 2022-01-01
- 如何添加到目前为止的天数? 2022-01-01
- fetch 是否支持原生多文件上传? 2022-01-01
- Bokeh Div文本对齐 2022-01-01
- npm start 错误与 create-react-app 2022-01-01
- 在 contenteditable 中精确拖放 2022-01-01
- 即使用户允许,Gmail 也会隐藏外部电子邮件图片 2022-01-01
- Fabric JS绘制具有活动形状的多边形 2022-01-01
- 检查 HTML5 拖放文件类型 2022-01-01
- 原生拖动事件后如何获取 mouseup 事件? 2022-01-01
