2015-07-09 55 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