2015-08-12 5 views
0

Кто-нибудь знает, как узнать, существует ли свойство объекта? Вот мой пример:Как узнать, существует ли свойство в объекте

var test = { 
    a : 'west', 
    b : { 
    a : 'rest' 
    }, 
    d : { 
    a : 'pest' 
    } 
}; 
// I want to access 'a' in 'c' 
typeof test.c.a; // fails! 

typeof, кажется, не может пройти мимо того факта, что 'c' не существует, чтобы проверить, если 'a' существует внутри него (я также пытался jQuery.type(), которые также не таким же образом - Я бы подумал, что внутри этой функции будет проверяться ошибка).

В этом примере, конечно, я мог бы просто проверить, существует ли сначала 'c', но в моей реальной ситуации у меня есть большой и глубокий объект, и мне нужно динамически извлекать данные из любого потенциального местоположения, поэтому было бы неплохо, если бы были готовы - это решение, которое не требует использования try-catch.

Заранее благодарен!

+0

использование попытка поймать .. – Raghavendra

+0

@raghavendra Обработка исключений должна быть за ... исключениями. Если вы можете проверить что-то заранее, вы действительно должны это сделать. –

+0

@JamesThorpe нет другого пути, кроме этого. Я предлагаю использовать его, если вам требуется проверить свойство, которое существует не на самом уровне глубины. – Raghavendra

ответ

0

Я не могу ручаться за любую существующую функциональность в любой js-среде для поиска вложенных свойств, но вы, безусловно, можете использовать свой собственный.

hasOwnProperty является частью стандарта сценария ECMA.

if(test.hasOwnProperty("c")) 
 
{ 
 
    console.log("test.c = " + test.c); 
 
}

Если вы ищете, чтобы найти глубоко вложенные свойства, то вы могли бы свернуть свою собственную функцию, чтобы проверить, если вложенная свойство существует, и если да, то вернуть его.

function hasNestedProperty(testObject, properties) 
 
{ 
 
    var maxDepth = properties.length; 
 
    var i, hasProperty = false; 
 
    var currObj = testObject; 
 
    
 
    while(hasProperty && i < maxDepth) 
 
    { 
 
     if(currObj.hasOwnProperty(properties[i]) 
 
     { 
 
     currObj = currObj[properties[i]]); 
 
     i ++; 
 
     } 
 
     else 
 
     { 
 
     hasProperty = false; 
 
     } 
 
    } 
 
            
 
    return hasProperty; 
 
}

Смежные вопросы