2013-05-17 140 views
7

如果我們將alert(null==undefined)輸出到true爲什麼null == undefined在javascript中爲true

這是什麼邏輯原因。

這是硬編碼在JavaScript中的東西還是有這個解釋。

+1

燁......你能給我一些材料,它說什麼的原因,並不僅僅是它等於:P – Nav

+0

我會說,因爲不確定意味着什麼aswel,如果你的DIV不有一個ID,它是未定義的,或者我們可以說,不存在,空,無效。 –

+0

你可以請解釋如何==實際上運行時,它歸結爲比較undefined和null – Nav

回答

15

語言規範explicitly says

如果x爲空,y是不確定的,返回true

我不知道的解釋推理的語言設計過程中的任何記錄該決定,但==有處理不同類型的規則,「空」和「未定義」都是「無」意思,所以讓它們相等是很直觀的。

(如果您不想鍵入小提琴,請使用===代替)。

+0

所以你的意思是說它是硬編碼的吧? – Nav

+1

錯,是的。它是核心語言的一部分。 – Quentin

+0

告訴我一件事......當我們使用==類型是平等的,然後檢查平等權嗎?未定義的類型是未定義的,並且null的類型是對象然後是對象==未定義? – Nav

4

出於同樣的原因,0 == "0" - JavaScript是弱類型 - 如果事情可以轉換成別的東西那麼這將是除非你使用===

alert(null===undefined); 

會給你假的。

至於爲什麼這些特定的轉換髮生 - 答案很簡單「規範說這是應該發生的事情」。除了「因爲它這麼說」之外,並不需要有其他理由,因爲編程語言爲什麼會以某種方式運行。

+1

你能解釋什麼是被轉換成什麼? – Nav

+1

因爲多數民衆贊成什麼語言規範應該發生。除了「文檔如此說明」之外,不需要有其他的理由。 – PhonicUK

3

使用雙等號運算符強制Javascript執行類型強制。

換句話說,當你做x == y,如果xy是同一類型的不,JavaScript的一個值轉換爲另一個比較之前,就像如果字符串和數字進行比較,字符串總是被鑄造成數然後進行比較

由於這個原因,JavaScript中混合類型的許多比較可能導致可能意外或違反直覺的結果。

如果您想在JavaScript中進行比較,通常使用三重平等運算符===而不是雙等號更好。這不是一種類型的強制;相反,如果類型不同,則返回false。這通常是你需要的。

如果您完全肯定您需要,您只能使用雙等號。

+0

這應該是最好的答案。很好的解釋! –

-3

==比較運算符不檢查類型。 nullundefined都返回false。這就是爲什麼你的代碼實際上檢查是否false等於false

> null == undefined; 
< true 
> false == false 
< true 

但是它們的類型並不相同。

> typeof undefined; 
< "undefined" 
> typeof null; 
< "object" 

正因爲如此,下面的語句將返回false,因爲===比較操作檢查兩種類型及其價值。

> undefined === null; 
< false 
+0

爲什麼選擇倒票?請解釋.. – Broxzier

+1

正如Quentin的答案所解釋的那樣,答案是「只需要布爾值,數字或需要檢查的數據字符串」就是不正確的。 'null'和'undefined'不會被轉換爲另一種類型,他們有自己的規則。 –

+0

@AshBurlaczenko現在更新我的答案。 – Broxzier

相關問題