2013-04-11 6 views
5

मैंने काफी लंबे समय तक अपवाद संभालने की उपेक्षा की है, मुख्य रूप से क्योंकि मैं इसे एसओ, 2 साल जावास्क्रिप्ट लिखने वाले स्निपेट में कभी नहीं देखता था और मुझे यह भी पता नहीं था कि जावास्क्रिप्ट में अपवाद हैंडलिंग था। अपवाद हैंडलिंग को देखने के लिए अन्य भाषाएं बहुत आम हैं, जावास्क्रिप्ट के लिए अपवाद हैंडलिंग कम महत्वपूर्ण है? कुछ सामान्य परिदृश्य क्या हैं जिन्हें हमेशा जावास्क्रिप्ट में अपवाद हैंडलिंग का उपयोग करना चाहिए और नहीं करना चाहिए?क्या मुझे हमेशा जावास्क्रिप्ट के लिए प्रयास कैच ब्लॉक में कोड लपेटना चाहिए?

क्या यह नियम जावास्क्रिप्ट के लिए भी लागू होता है?

Why should I not wrap every block in "try"-"catch"?

+1

मान लीजिए कि आपने प्रत्येक ब्लॉक को कोशिश/पकड़ में लपेट लिया है: वास्तव में अपवादों के साथ आपका कैच ब्लॉक क्या करेगा? – nnnnnn

+0

@nnnnn पूरी स्क्रिप्ट को दुर्घटनाग्रस्त नहीं होने से बचने के लिए पर्याप्त उपयोगी होगा? मुझे पकड़ने वाले ब्लॉक के साथ jQuery UI 'कोड में कुछ पकड़ने वाले ब्लॉक देखने की कोशिश है, तो मुझे लगता है कि यह सभी कोड लपेटने का एक उद्देश्य है? –

+1

मेरा मुद्दा यह है कि अपवाद के बाद क्या होगा या क्या होना चाहिए और तदनुसार कोड करना सुनिश्चित करें। "पूरी लिपि को दुर्घटनाग्रस्त करने से बचें" वास्तव में मदद नहीं करता है अगर पहली छमाही में अपवाद होता है लेकिन दूसरा आधा पहले छमाही से वैध परिणामों के बिना काम नहीं करेगा। और कुछ अपवादों को पहले स्थान पर सही ढंग से कोडिंग से पूरी तरह से बचाया जा सकता है - मैं यह नहीं कह रहा हूं कि आप ऐसा करेंगे, लेकिन मैंने बहुत सारे कोड देखे हैं जहां लेखक ने डोडी कोड लिखा था और फिर इसे खाली पकड़ने के प्रयास में लपेट लिया था उपयोगकर्ता को टालने योग्य त्रुटियों को देखने से बचने के लिए बस ब्लॉक करें। – nnnnnn

उत्तर

3

जावास्क्रिप्ट में सबसे आम रणनीति रक्षात्मक रूप से लिखना और अच्छी तरह से परीक्षण करना है।

उदा।

var element; 

if (document && document.getElementById) { 
    element = document.getElementById('foo'); 
} 

if (element) { 
    // use element 
}  

लेकिन isHostMethod तरह परीक्षण के साथ एक अधिक सामान्य प्रारूप में लिखा: वहाँ पुस्तकालयों के समान परीक्षण के साथ एक वर्ग में शुरू कर रहे हैं।

नियोजित प्रयास करें ... केवल अंतिम उपाय के रूप में देखें जहां सुविधा का पता लगाना या अन्य सुरक्षा उपलब्ध नहीं है। मेजबान होस्ट ऑब्जेक्ट्स कभी-कभी बेकार परिणाम देता है या यहां तक ​​कि त्रुटियों को भी फेंक सकता है (उदाहरण के लिए सभी XMLHttpRequest स्क्रिप्ट्स का प्रयास करें..चैच का उपयोग करें क्योंकि आईई में समर्थन के लिए परीक्षण अनिवार्य है, इसलिए केवल एक ही विकल्प यह है कि इसे कॉल करें और देखें कि क्या होता है)।

माइनर स्क्रिप्ट त्रुटियों में कोई समस्या नहीं है क्योंकि अधिकतर ब्राउज़र उन्हें डिफ़ॉल्ट रूप से नहीं दिखाएंगे। अधिकांश गैर-तुच्छ पृष्ठ ब्राउज़र, सेटिंग्स और उपयोगकर्ता के नेटवर्क वातावरण जैसी चीज़ों के आधार पर हर समय त्रुटियों को फेंक देते हैं (एसओ सहित)। उपयोगकर्ताओं को केवल कार्यक्षमता से वंचित कर दिया गया है कि वे जानते हैं कि वे गायब हैं (और वास्तव में इससे लाभ हो सकते हैं)। इसलिए एक सामान्य रणनीति है कि हम किसी भी स्क्रिप्ट के बिना पृष्ठ को कार्यात्मक बनाते हैं, फिर प्रयोज्यता बढ़ाने के लिए स्क्रिप्ट सुविधाओं को जोड़ें। यदि कोई त्रुटि होती है जो पृष्ठ को उपयोगी होने से रोकती है तो इस तरह बुनियादी कार्यक्षमता में हमेशा गिरावट आती है।

यह रणनीति हमेशा संभव नहीं हो सकती है, लेकिन यह एक अच्छा प्रारंभिक बिंदु है और इसे हल्के से नहीं छोड़ा जाना चाहिए।

0

अपवाद अगर मामले प्रदर्शन है एक बड़ी समस्या है। लेकिन यह बहुत आसान तरीके से त्रुटि का पता लगाने बनाता है।

यदि कुछ ऐसे औजारों का उपयोग कर रहे हैं जो अपवाद फेंकते हैं तो आपको उन्हें try catch ब्लॉक के माध्यम से चलाया जाना चाहिए।

कोशिश अपवाद फेंक जब जावास्क्रिप्ट

1

कोडिंग सी में यह हमेशा वापसी कोड की जाँच करने के अच्छा व्यवहार था कम करने के लिए।

फिर अपवादों के साथ सी ++ आता है। एक जावा ने वास्तव में भारी उपयोग किया है, यहां तक ​​कि बहुत भारी (उदाहरण के लिए: Integer.parseInt: भले ही आप केवल जांचना चाहते हैं, अगर कुछ स्ट्रिंग है, तो आपको अभी भी अपवाद को संभालना होगा)।

जावास्क्रिप्ट में अपवाद हैंडलिंग की अन्य अवधारणा है। अपवाद हैंडलिंग के लिए कॉलबैक प्रदान करना एक अच्छा अभ्यास है। jQuery चयनकर्ता अभी भी 'काम' करते हैं यदि कोई तत्व नहीं मिलता है, तो आपको केवल 0-तत्व चयनकर्ता मिलता है।

तो यदि आप अपवाद फेंकने वाले कोड का उपयोग कर रहे हैं, तो आपको इसे संभालना होगा। लेकिन आपको अपवाद फेंकने और कॉलबैक के माध्यम से त्रुटि प्रबंधन का समर्थन करना चाहिए।

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