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?
基础教程推荐
- Javascript 在多个元素上单击事件侦听器并获取目标 2022-01-01
- WatchKit 支持 html 吗?有没有像 UIWebview 这样的控制器? 2022-01-01
- 如何使用sencha Touch2在单页中显示列表和其他标签 2022-01-01
- Node.js 有没有好的索引/搜索引擎? 2022-01-01
- 什么是不使用 jQuery 的经验技术原因? 2022-01-01
- 如何使用 CSS 显示和隐藏 div? 2022-01-01
- 为什么我在 Vue.js 中得到 ERR_CONNECTION_TIMED_OUT? 2022-01-01
- 如何在特定日期之前获取消息? 2022-01-01
- 每次设置弹出窗口的焦点 2022-01-01
- jQuery File Upload - 如何识别所有文件何时上传 2022-01-01
