2012-12-17 94 views
2

嗨,我很新的JS。我怎麼能比較JS中的undefined?

可以說我有一個名爲test的對象,它沒有屬性missing。但我嘗試訪問相同的:

test.missing //getting undefined as output 

現在,我試圖訪問missing屬性(這樣test.missing.404),這將給我一個TypeError。但我的書上說,我們可以擺脫這個TypeError的是這樣的:

test.missing && test.missing.404 

現在我最大的問題是,如何能夠做一個&&undefined類型和TypeError類型。無法猜測Js在這裏做什麼。

在此先感謝。

回答

4

undefined在JS被視爲false如果事情有值,則視爲true,所以:你

//if test.missing is NOT undefined and test.missing.404 is also NOT undefined 
if (test.missing && test.missing.404) 
+0

'false','undefined','null','NaN','0'和'「」'是虛假的,其他一切都是真的。我只提到這一點,因爲有些人可能會認爲''''有「價值」,和/或'[]'沒有價值......更容易明確虛假價值,只有6 :) – gnarf

+1

@gnarf quirk:由於歷史原因,「document.all」也評估爲「false」。 –

+0

愚蠢的歷史......;)感謝您的更正。 – gnarf

1

首先應該知道JS像許多其他的編程語言相比,在使用短路的技術。所以在這種情況下,如果第一個條件是錯誤的,那麼就不需要檢查下一個條件。這是因爲0 && X將始終爲0。

這樣說,test.missing && test.missing.404可以被認爲是「如果測試對象缺少屬性,並且(測試對象的)缺少屬性具有404屬性」,則繼續。如果測試對象首先沒有缺失屬性,那麼JS intepreter將完全忽略對缺失屬性的404屬性的檢查。

所以重點是上面的代碼不是& &未定義和TypeError的比較,而是首先檢查缺失的屬性和404屬性,如果第一個屬性存在。我希望這是很有道理的廣告解釋。