我知道null
是一個沒有屬性或功能的對象。爲什麼(null == false)和(null == true)都返回false?
但是,我很困惑,爲什麼console.log(null == false);
和console.log(null == true);
都返回false。
null
和boolean
之間的轉換規則是什麼?
我知道null
是一個沒有屬性或功能的對象。爲什麼(null == false)和(null == true)都返回false?
但是,我很困惑,爲什麼console.log(null == false);
和console.log(null == true);
都返回false。
null
和boolean
之間的轉換規則是什麼?
這是因爲Abstract Equality Comparison Algorithm要求,如果Type(x)
或Type(y)
是布爾表達式x == y
然後布爾值應該是通過ToNumber
強制輸入數字,將true
至1和false
至+0
。
這意味着true == something
或something == true
導致1 == something
或something == 1
任何比較(與false
和+0
爲false
替換true
和1
)。
The Null type不會比較爲等於1或+0(實際上,null只能與AECA中的undefined
相比較)。
關於MDN中的所有不同種類的平等的詳細討論,如果你想知道更多的信息,這是值得一看的。
不過,如果你強迫null
了一些很coerced to +0
所以+null == false
實際上返回true
。
非常感謝你,我還有一個困惑,我知道'isNaN(空)''等於和FALSE''號(空)''等於0',這是爲什麼空強制轉換爲'undefined'不'0' – iatboy
'null'和'因爲他們在JS中只有兩個元素不能處理任何類型的屬性訪問undefined'是等效在這種情況下最有可能的。 '(0).toString()===「0」,但是'(null).anything'產生一個'TypeError'。 –
對於一個完整的答案,看到https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness – stevemao
值null
是一個JavaScript文字,代表「空」值或「未定義」。 null
是JavaScript的原始值之一。它既不等於布爾型true
也不等於布爾值false
,因爲它的值未定義。 null
的值更傾向於虛假,即使它不是false
。這就是爲什麼它被稱爲「虛假」的運營商,並且當var
是null
時,if (var) { }
塊不會被執行。
'var'不應該被用作變量名稱,因爲它是一個保留字。例子應該說'someVar'而不是'var'。 – SherylHohman
不要將「..its value undefined」與「undefined」的值混淆。更好地表述爲「......其價值未知」。 – SherylHohman
答案: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
你或許應該更清楚這這個答案從源和部分你自己寫了的部分。見http://stackoverflow.com/help/referencing – BoltClock
添加到當前的討論。 null> = false返回true。
我認爲,這是因爲這被解釋爲!(空<假)
他們都等於假的,因爲空不等於真或假。就像「1」不等於「比薩」或「{}」。當像單獨使用,如果它被裹挾語句布爾值false,因爲它是一個falsey值 –
空是文字和假是布爾,可能是兩者都是不可比擬的類型 –
,因爲JavaScript –