我知道null
是一个没有属性或功能的对象。
但是,我很困惑,为什么console.log(null == false);
和console.log(null == true);
都返回false。
null
和boolean
之间有哪些转换规则?
答案 0 :(得分:46)
这是因为Abstract Equality Comparison Algorithm要求如果Type(x)
或Type(y)
是表达式x == y
中的布尔值,那么布尔值应通过{{强制转换为数字3}},将true
转换为1,将false
转换为+0
。
这意味着对true == something
或something == true
的任何比较都会产生1 == something
或something == 1
(将true
和1
替换为{{1}和false
的{{1}}。{/ p>
ToNumber
的比较不等于1或+0(实际上,null只与AECA中的+0
相当)。
在The Null type上详细讨论了JavaScript中所有不同类型的相等性,如果你想了解更多信息,那么值得一看。
但是,如果您将false
强制转换为数字MDN,那么undefined
实际上会返回null
。
答案 1 :(得分:2)
答案:null和boolean之间没有相对的方面。
MDN来源: -
值null是一个文字(不是全局对象的属性,如 undefined可以是)。在API中,通常在一个地方检索null 可以预期对象,但没有对象是相关的。检查时 null或undefined要注意相等(==)和之间的差异 identity(===)运算符(类型转换是使用 前)。
// foo does not exist, it is not defined and has never been initialized: > foo "ReferenceError: foo is not defined" // foo is known to exist now but it has no type or value: > var foo = null; foo "null"
null和undefined
之间的区别typeof null // object (bug in ECMAScript, should be null) typeof undefined // undefined null === undefined // false null == undefined // true
答案 2 :(得分:1)
值null
是JavaScript文字表示“空”值或“未定义”。 null
是JavaScript的原始值之一。它既不等于布尔true
也不等于布尔false
,因为它的值是未定义的。 null
的值更倾向于假,即使它不是false
。这就是为什么它被称为“假”操作符,if (var) { }
var
null
时,{{1}}块无法执行。
答案 3 :(得分:1)
添加到当前的讨论中。 null> = false返回true。
我相信这是因为这被解释为!(null< false)