2014-12-24 448 views
22

我知道null是一個沒有屬性或功能的對象。爲什麼(null == false)和(null == true)都返回false?

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

nullboolean之間的轉換規則是什麼?

+5

他們都等於假的,因爲空不等於真或假。就像「1」不等於「比薩」或「{}」。當像單獨使用,如果它被裹挾語句布爾值false,因爲它是一個falsey值 –

+0

空是文字和假是布爾,可能是兩者都是不可比擬的類型 –

+4

,因爲JavaScript –

回答

32

這是因爲Abstract Equality Comparison Algorithm要求,如果Type(x)Type(y)是布爾表達式x == y然後布爾值應該是通過ToNumber強制輸入數字,將true至1和false+0

這意味着true == somethingsomething == true導致1 == somethingsomething == 1任何比較(與false+0false替換true1)。

The Null type不會比較爲等於1或+0(實際上,null只能與AECA中的undefined相比較)。

關於MDN中的所有不同種類的平等的詳細討論,如果你想知道更多的信息,這是值得一看的。

不過,如果你強迫null了一些很coerced to +0所以+null == false實際上返回true

+0

非常感謝你,我還有一個困惑,我知道'isNaN(空)''等於和FALSE''號(空)''等於0',這是爲什麼空強制轉換爲'undefined'不'0' – iatboy

+0

'null'和'因爲他們在JS中只有兩個元素不能處理任何類型的屬性訪問undefined'是等效在這種情況下最有可能的。 '(0).toString()===「0」,但是'(null).anything'產生一個'TypeError'。 –

+0

對於一個完整的答案,看到https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness – stevemao

0

null是一個JavaScript文字,代表「空」值或「未定義」。 null是JavaScript的原始值之一。它既不等於布爾型true也不等於布爾值false,因爲它的值未定義。 null的值更傾向於虛假,即使它不是false。這就是爲什麼它被稱爲「虛假」的運營商,並且當varnull時,if (var) { }塊不會被執行。

+0

'var'不應該被用作變量名稱,因爲它是一個保留字。例子應該說'someVar'而不是'var'。 – SherylHohman

+0

不要將「..its value undefined」與「undefined」的值混淆。更好地表述爲「......其價值未知」。 – SherylHohman

2

答案:null和boolean之間沒有相對的方面。

MDN來源: -

null值是一個文字(如 未定義可以是全局對象的不是一個屬性)。在API中,通常會在可以預期對象但沒有對象相關的位置檢索null。在檢查 null或undefined時,要小心等號(==)和 標識(===)運算符(類型轉換與 前者一起執行)之間的差異。 null和undefined之間

// 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" 

差分

typeof null  // object (bug in ECMAScript, should be null) 
typeof undefined // undefined 
null === undefined // false 
null == undefined // true 

Javascirpt|MDN

+3

你或許應該更清楚這這個答案從源和部分你自己寫了的部分。見http://stackoverflow.com/help/referencing – BoltClock

1

添加到當前的討論。 null> = false返回true。

我認爲,這是因爲這被解釋爲!(空<假)

相關問題