2012-07-09 38 views
0

我不記得正是其所謂但是PHP檢查,一旦存在,因爲它的功能找到一個假值,就像這樣:PHP風格功能檢查在javascript

// php 
if(isset(a["hi"]) && isset(a["hi"]["hello"])) { 

} 

這裏如果a["hi"]不設置,它不會檢查下一個a["hi"]["hello"]

檢查這樣的事情在JavaScript你需要嵌套

// js 
if(typeof(a["hi"]) != "undefined") { 
    if(typeof(a["hi"]["hello"]) != "undefined") { 

    } 
} 

,我們可以做的PHP風格慵懶檢查在JavaScript? (我可能不會用最好的方法來檢查,如果在多維數組存在的元素,如果有這樣做的簡潔的方式,很想知道。)

的感謝!

+1

您正在尋找的術語在第一個非真實表達式中多步布爾檢查是如何「短路」的? JavaScript也具有這種功能(雖然它在賦值多步布爾值時具有不同的行爲,例如'foo = bar || {}'(但這不是你的問題) – 2012-07-09 05:13:46

+0

@LarryOBrien謝謝,是的,它的「short - 'circuited「,是的,現在它似乎工作,並沒有正確構建在螢火蟲中的聲明 – DMin 2012-07-09 05:20:49

+0

如果'a ['hi'] ['hello']是'defined'',沒有辦法,'a ['hi ']'將會是'undefined',我認爲你只需要第二個條件。 – Jashwant 2012-07-09 05:26:07

回答

2

您可以使用in來檢查屬性的存在。

if(a && ('hi' in a) && ('hello' in a['hi'])) { 

} 
+0

謝謝,我將使用它,它比typeof讀得更好。 – DMin 2012-07-09 05:19:10

1
if(a.hi === undefined && a.hi.hello === undefined) { 

,如果你知道a.hi永遠不能成爲falsey值(null/false/0),你可以做

if(!a.hi && !a.hi.hello) { 
1

檢查typeof的字符串"undefined"是一個變量相當於使用===檢查變量是否與undefined關鍵字的數據類型相同。因此,您可以減少嵌套的if語句一條語句:

if(a.hi !== undefined && a.hi.hello !== undefined) { 
    // do something with a.hi.hello 
} 

值得一提的是,上述說法假定a當if語句發生這可能會導致錯誤不爲空。這也適用的是,如果你需要a.hi.hello是本作的if語句來計算,那麼你可以使用falsy檢查aa.hi,因爲他們將需要object類型(這是不falsy):

if(!!a && a.hi && a.hi.hello !== undefined) { 
    // do something with a.hi.hello 
}