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

时间:2014-12-24 06:16:19

标签: javascript null boolean

我知道null是一个没有属性或功能的对象。

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

nullboolean之间有哪些转换规则?

4 个答案:

答案 0 :(得分:46)

这是因为Abstract Equality Comparison Algorithm要求如果Type(x)Type(y)是表达式x == y中的布尔值,那么布尔值应通过{{强制转换为数字3}},将true转换为1,将false转换为+0

这意味着对true == somethingsomething == true的任何比较都会产生1 == somethingsomething == 1(将true1替换为{{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

Javascirpt|MDN

答案 2 :(得分:1)

null是JavaScript文字表示“空”值或“未定义”。 null是JavaScript的原始值之一。它既不等于布尔true也不等于布尔false,因为它的值是未定义的。 null的值更倾向于假,即使它不是false。这就是为什么它被称为“假”操作符,if (var) { } var null时,{{1}}块无法执行。

答案 3 :(得分:1)

添加到当前的讨论中。 null> = false返回true。

我相信这是因为这被解释为!(null< false)