यदि आप YAHOO.Foo.Bar
को वैध ऑब्जेक्ट होने की उम्मीद करते हैं, लेकिन अपने कोड बुलेटप्रूफ को बस मामले में बनाना चाहते हैं, तो बस इसे चारों ओर पकड़ने की कोशिश करें और किसी त्रुटि वाले हैंडलर को किसी भी गायब होने दें खंड। उसके बाद, आप सिर्फ चार के बजाय एक if
शर्त यह है कि अगर टर्मिनल संपत्ति मौजूद है की पहचान करेगा और एक पकड़ने हैंडलर चीजों को पकड़ने के लिए उपयोग कर सकते हैं मध्यवर्ती वस्तुओं मौजूद नहीं है:
try {
if (YAHOO.Foo.Bar.xyz) {
// operate on YAHOO.Foo.Bar.xyz
} catch(e) {
// handle error here
}
या, पर कैसे अपने कोड के आधार काम करता है, तो यह और भी सिर्फ इस हो सकता है:
try {
// operate on YAHOO.Foo.Bar.xyz
} catch(e) {
// do whatever you want to do when YAHOO.Foo.Bar.xyz doesn't exist
}
मैं विशेष रूप से इन का उपयोग जब विदेशी इनपुट है कि एक विशेष प्रारूप का माना जाता है के साथ काम कर, लेकिन अमान्य इनपुट एक संभावना है कि मैं पकड़ने और अपने आप को नहीं बल्कि हैंडल करना चाहते है अपवाद को ऊपर की तरफ फैलाने की बजाय।
सामान्य रूप से, कुछ जावास्क्रिप्ट डेवलपर्स अंडर-यूज का उपयोग/प्रयास करते हैं। मुझे लगता है कि अगर कभी एक बड़े फंक्शन ब्लॉक के चारों ओर एक ही कोशिश/पकड़ के साथ इनपुट की जांच कर रहे हैं और कोड को एक ही समय में बहुत सरल और अधिक पठनीय बनाते हैं तो मैं कभी-कभी 5-10 को प्रतिस्थापित कर सकता हूं। जाहिर है, जब यह उचित है तो विशेष कोड पर निर्भर करता है, लेकिन यह निश्चित रूप से विचार करने लायक है।
एफवाईआई, यदि सामान्य ऑपरेशन प्रयास/पकड़ के साथ अपवाद नहीं फेंकना है, तो यह बयान के गुच्छा से बहुत तेज़ हो सकता है।
आप अपवाद संचालक का उपयोग नहीं करना चाहते हैं, आप के लिए किसी भी मनमाने ढंग से पथ का परीक्षण करने के लिए एक समारोह बना सकते हैं:
function checkPath(base, path) {
var current = base;
var components = path.split(".");
for (var i = 0; i < components.length; i++) {
if ((typeof current !== "object") || (!current.hasOwnProperty(components[i]))) {
return false;
}
current = current[components[i]];
}
return true;
}
उदाहरण उपयोग:
var a = {b: {c: {d: 5}}};
if (checkPath(a, "b.c.d")) {
// a.b.c.d exists and can be safely accessed
}
क्या आप सिर्फ 'अगर (YAHOO.Foo.Bar.xyz) 'नहीं कर सकते हैं? –
http://enterprise-js.com/34 <- है एक मजाक btw –
@Michael, तो आप सिर्फ 'नहीं कर सकते हैं (YAHOO.Foo.Bar.xyz)' क्योंकि फू या बार अस्तित्व में नहीं है, तो , तो 'अगर (YAHOO.Foo.Bar.xyz)' एक अपवाद मध्यवर्ती मूल्यों कि अपरिभाषित हैं की भिन्नता की वजह से फेंक देते हैं। – jfriend00