2013-02-15 19 views
6

यह जांचने के लिए अनुशंसित तरीका क्या है कि obj.prop.otherprop.another जैसी ऑब्जेक्ट प्रॉपर्टी को परिभाषित किया गया है या नहीं?जावास्क्रिप्ट जांचें कि क्या संपत्ति

if(obj && obj.prop && obj.prop.otherprop && obj.prop.otherprop.another) 

यह अच्छी तरह से काम करता है, लेकिन पर्याप्त बदसूरत है।

+0

http://stackoverflow.com/questions/135448/how-do-i-check-to-see-if-an-object-has-a-property-in-javascript – JonH

+0

@JonH नहीं, वास्तव में नहीं ... –

उत्तर

3

ऐसा करने का सबसे प्रभावी तरीका obj.prop.otherprop.another की कोशिश {} पकड़ (अपवाद) {} ब्लॉक में है। यदि शेष शेष मौजूद हैं तो यह सबसे तेज़ होगा; अन्यथा अपवाद संभाला जाएगा।

var a = null; 
try { 
    a = obj.prop.otherprop.another; 
} catch(e) { 
    obj = obj || {}; 
    obj.prop = obj.prop || {}; 
    obj.prop.otherprop = obj.prop.otherprop || {}; 
    obj.prop.otherprop.another = {}; 
    a = obj.prop.otherprop.another ; 
} 
+0

कृपया इसका उपयोग न करें .. यह सुझाव देने के लिए यह सिर्फ बेवकूफ है। – jagzviruz

0

नहीं कह यह बेहतर है, लेकिन ...

x = null 
try { 
    x = obj.prop.otherprop.another; 
} catch() {} 
// ... 

या वैकल्पिक रूप से ...

function resolve(obj, path) { 
    path = path.split('.'); 
    while (path.length && obj) obj = obj[path.shift()]; 
    return obj; 
} 

x = resolve(obj, 'prop.otherprop.another'); 

... लेकिन मुझे लगता है कि वास्तविक जवाब वहाँ एक सबसे अच्छा है नहीं है इसके लिए अभ्यास करें। यह नही है कि मैं जानता हूँ।

0

आप एक मूर्खतापूर्ण मूड में हैं, तो यह काम करेगा:

if ((((obj || {}).prop || {}).anotherprop || {}).another) { ... } 

लेकिन अगर तीन नई वस्तुओं को प्रारंभ वास्तव में नहीं होने के लिए बार-बार पथ टाइप लायक है मैं नहीं जानता।

संबंधित मुद्दे