2010-04-27 13 views
6

मैं प्रोटोटाइप.जेएस में काफी कोड लिख रहा हूं जो एक डीओएम-आईडी नहीं मिला तो शून्य हो जाता है।जावास्क्रिप्ट में "NullPointerExceptions" को पकड़ना

$("someId").show(); 

तो someId मौजूद नहीं है, एक विधि अशक्त पर बुलाया जाएगा, जो त्रुटि के बाद सभी जे एस प्रभाव को निष्क्रिय करने पूरे कार्यक्रम रुकती है, प्रभाव में। मैं इस तरह के एक बयान को निष्पादित करने से पहले सिर्फ शून्य की जांच कर सकता था, लेकिन यह थकाऊ हो रहा है।

मैं अपवाद पकड़ना चाहता हूं लेकिन मुझे यकीन नहीं है कि यह कौन सा है। MDC सूचीबद्ध करता है निम्नलिखित ECMA स्क्रिप्ट त्रुटि प्रकार, लेकिन उनमें से कोई भी पहली नज़र पर जो मैं चाहता होने लगते हैं:

* Error 
* EvalError 
* RangeError 
* ReferenceError 
* SyntaxError 
* TypeError 
* URIError 
* DOMException 
* EventException 
* RangeException 

इसके अलावा, ब्राउज़र अशक्त पर एक विधि कॉल से निपटने का एक एकीकृत तरीका क्या है?

+5

* मैं तो बस इस तरह का बयान निष्पादित करने से पहले अशक्त के लिए जांच कर सकता है, लेकिन इस थकाऊ हो रही है। * ओह? क्या आप एक डेवलपर हैं या नहीं? चेक के साथ मजबूत कोड लिखना एक सामान्य और अच्छी प्रथा है। – BalusC

+0

अच्छा बिंदु, लेकिन क्लॉज मेरे कोड को वास्तव में अपठनीय बनाते हैं, लेकिन बार-बार घोंसला करते हैं। मुझे यह कहना चाहिए था कि 'थकाऊ' के ​​बजाय। –

+0

उत्तर स्वीकार करते हैं यदि यह आपके लिए काम करता है –

उत्तर

0

बस की अनदेखी जो अपवाद यह है ...

try 
{ 
    null.hey() 
} 
catch(e) 
{ 
    //handle it here 
} 
2

मैं वहाँ एकता पाया जा सकता है पर विश्वास नहीं करते। क्रोम एक टाइप एरर फेंकता है, लेकिन आईई एक त्रुटि फेंकता है, तो आपको शायद सबकुछ पकड़ना होगा और गंभीर धारणाएं करनी होंगी। पहले शून्य के लिए जांच करने के लिए बेहतर है।

var element = $('someId'); 
if (element) { 
    element.show(); 
    // whatever else... 
} 

हैं element.show() केवल एक चीज आप के लिए इसकी जरूरत है, तो यह स्पष्ट रूप से एक बहुत कम लिखा जा सकता है, लेकिन ज्यादातर मामलों है कि उपयुक्त होगा में।

1

यदि आप श्रृंखला में जा रहे हैं। show()$("someId") पर पहले इसके परिणाम की जांच करें।

if ($("someId")) 
    $("someId").show(); 

or 

$("someId") && $("someId").show(); 

or 

if (someVar = $("someId")) 
    someVar.show(); 

आप $ (लपेट सकता है किसी कारण से आप वास्तव में उन्हें पहचान करने के लिए की जरूरत है) और एक कस्टम अपवाद:

function NullReferenceException(id) {this.id = id} 

function $my(id) { 
    var el = $(id); 
    if (!el) 
     throw new NullReferenceException(id); 
    return el 
} 

try { 
    $my("iDontExistId").show(); 
} catch (e) { 
    if (e instanceof NullReferenceException) 
     alert(e.id + " doesn't exist"); 
} 
1

इस संभाल करने के लिए सही तरीका कुछ करने से पहले अशक्त के लिए जाँच करने के लिए है एक वस्तु के साथ। ऐसा करने के कई तरीके हैं आशुलिपि, कम से कम है (एलेक्स कश्मीर के रूप में)

$("someId") && $("someId").show(); 

लिखा था लेकिन यह पढ़ने के लिए कठिन हो करने के लिए मुझे लगता है।

आपके सवाल का सीधे जवाब देने के लिए आप

try { $('someId').show(); } catch (e) {} 

कर सकते हैं लेकिन यह शौकिया लगता है। आपको स्पष्ट रूप से प्रोग्राम करना चाहिए क्योंकि बाद में किसी और को यह नहीं पता होगा कि आपने उस अजीब कोड को क्यों लिखा था। पहला उदाहरण थोड़ा अपारदर्शी है लेकिन कम से कम शून्य परीक्षण पहले होता है, और show() विधि में त्रुटियों को छिपाता नहीं है।

संयोग से, अगर आप प्रोटोटाइप के बजाय JQuery उपयोग कर रहे थे, इस कोड को त्रुटि के बिना काम करेंगे भले ही आईडी के साथ कोई वस्तु है 'someId':

$('#someId').show() 

है ऐसा इसलिए है क्योंकि JQuery रिटर्न में $() फ़ंक्शन एक संग्रह जो खाली हो सकता है लेकिन कभी शून्य नहीं होता है।

+0

मुझे यह एहसास है और मेरे मालिक ने प्रोटोटाइप पर जोर दिया। मुझे पसंद है लेकिन यह मुद्दा वास्तव में annyoing है। –

+0

+1 यह उल्लेख करने के लिए कि यह jQuery में कैसे काम करता है। –

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