2015-07-09 61 views
0

boundEvents是可能存在或可能不存在的數組。如果不存在,則下面的代碼將返回'undefined':Javascript:檢查可能不存在的數組中的鍵

console.log(typeof boundEvents); 

很好。這正是我想要的。現在說我想檢查這個理論數組是否存在密鑰,它可能存在也可能不存在。

console.log(typeof boundEvents['click']); 

嗯哦:

Uncaught TypeError: Cannot read property 'click' of undefined 

很公平,JavaScript的。因此,讓我們檢查,看看是否數組存在,在我們檢查的重點:

if(typeof boundEvents != 'undefined'){ 
    console.log(typeof boundEvents['click']); 
} 

重新工作,但我不知道是否有消除if聲明,只是檢查的boundEvents['click']存在方式直接,一步到位?

謝謝!

編輯:完整的答案,從下面結合:

var boundEvents = boundEvents || {}; 
console.log(boundEvents.hasOwnProperty('click')); 
+0

nope,你需要if語句。 – bhspencer

+0

不,你必須檢查每一層。 – tymeJV

+0

你可以做'console.log(typeof boundEvents!='undefined'&& typeof boundEvents ['click'])''。這是否更具可讀性留給讀者作爲練習。 –

回答

2

你可以這樣做:

boundEvents = boundEvents || {}; 
console.log(boundEvents['click']); 

或單行:

console.log((boundEvents || {})['click']); 
+0

剛纔寫的那個哈哈:-)但是更短並不總是更好,所以在現實中建議如果 –

+0

簡單(而且明顯,現在我正在看它),乾淨,仍然明確地解釋boundEvents可能未定義。謝謝! – crowhill

+0

這是問題的答案,但我也喜歡crowebird的建議。 – crowhill

1

如果你想要一個明確的true/false那麼:

(boundEvents || {}).hasOwnProperty('click') 
0

你可以檢查每一層到你想要的變量上。如果一切都是錯誤的,這將默認爲undefined。

((typeof boundEvents !== "undefined") && boundEvents['click']) || undefined