2016-05-16 134 views
0

比方说,我们有一个对象,看起来像window.someObject.someProperty.subProperty,我们有if条件,我们检查是否subProperty === "foo"检查嵌套对象属性

为了避免cannot read property xxx of undefined我会写类似

if (window.someObject && window.someObject.someProperty && window.someObject.someProperty.subProperty === "foo") { 
     // do something 
} 

现在想象的对象有更多的属性,这将是很长的,以检查他们。

所以我的问题是是否有一个更快的方式来执行该检查,而不必写所有的属性序列。

+0

谁约封闭你的try catch语句? – Tariq

回答

0

通常在使用API​​时,您应该能够预测可能会丢失什么以及什么不应该。可悲的是,没有更简单的方法来检查您是否想要确保每一步。然而,有预处理器,如CoffeeScript,它允许你这样做:window.someObject?.someProperty?.subProperty

但没有香草的方式。

0

javascript test for existence of nested object key已经回答,请检查自己的通用功能

function checkNested(obj /*, level1, level2, ... levelN*/) { 
    var args = Array.prototype.slice.call(arguments, 1); 

    for (var i = 0; i < args.length; i++) { 
    if (!obj || !obj.hasOwnProperty(args[i])) { 
     return false; 
    } 
    obj = obj[args[i]]; 
    } 
    return true; 
} 

var test = {level1:{level2:{level3:'level3'}} }; 

checkNested(test, 'level1', 'level2', 'level3'); // true 
checkNested(test, 'level1', 'level2', 'foo'); // false 
+0

[请不要复制和粘贴答案,而是引用它们。](http://stackoverflow.com/a/2631198/1293700) –