2011-05-11 6 views
5

MDN states:जावास्क्रिप्ट में सिंटेक्स त्रुटियों को पकड़ा जा सकता है?

एक सिंटैक्स त्रुटि फेंक दिया जब JavaScript इंजन टोकन या टोकन आदेश जब कोड को पार्स उस भाषा की वाक्य रचना के अनुरूप नहीं है का सामना करना पड़ता है।

लेकिन यदि कोई वाक्यविन्यास त्रुटि है, तो प्रोग्राम पहले स्थान पर कैसे चला सकता है?

जावास्क्रिप्ट सिंटैक्स त्रुटियों को कैसे पकड़ा जा सकता है?

+0

संबंधित: http://stackoverflow.com/questions/12219154/ignore-javascript-errors-in-a-page-and-continue-executing-the-script –

उत्तर

5

यह क्रम त्रुटियों कि कोशिश पकड़ के साथ पकड़ा जा सकता है, (यदि आप eval अपने कोड आप evaled कोड में वाक्यविन्यास त्रुटियों संभाल कर सकते हैं लेकिन यह है कि सिर्फ अजीब है ) त्रुटियों सिंटैक्स नहीं।

मैं आप पढ़ सकते हैं की सलाह देते हैं इन:

+1

आपका लिंक "सामग्री स्थानांतरित" पृष्ठ पर इंगित करता है। .. –

+0

एक्स्टलिंग कोड पर एक्स्टिलेशन कोड पर और सिंटैक्स त्रुटियों पर अपवादों को पकड़ने के लिए +1 संभव है, लेकिन भद्दा। – Martijn

+0

अरे यह एक टूटी हुई लिंक है – Pacerier

0

तुम सिर्फ यह सुनिश्चित करें कि आप वाक्य रचना मान्य JavaScript लिखा है की कोशिश कर रहे हैं, तो मैं JSLint याकी अनुशंसा नहीं कर सकता 0 दृढ़ता से पर्याप्त है।

  1. Learn itUse it.
  2. एक बेहतर जावास्क्रिप्ट प्रोग्रामर बनें।
  3. ???
  4. लाभ!
+1

9gagger, क्या आप हैं? – Santosh

4

आप प्रोग्रामर से बनाई गई तथा क्रम अपवाद पकड़ कर सकते हैं, लेकिन आप उन्हें कुछ ब्राउज़रों में संभाल window.onerror का उपयोग कर सकते हैं आप जावास्क्रिप्ट वाक्यविन्यास त्रुटियों, नहीं पकड़ सकते।

यह JavaScript- The Complete Reference by Thomas-Powell पुस्तक से लिया गया है जो मुझे बहुत पसंद है। आप उस पुस्तक में कोड उदाहरणों का उल्लेख कर सकते हैं।

+0

क्या आपके पास कोड उदाहरण है? आप किस ब्राउजर का मतलब है? – Pacerier

4

आप सिंटैक्स त्रुटियों को संभालने के लिए try-catch ब्लॉक का उपयोग नहीं कर सकते हैं क्योंकि कोड को पार्स किया जा रहा है, जबकि यह चल रहा है, जबकि उन्हें फेंक दिया गया है।

हालांकि आप window.onerror का उपयोग कर सकते हैं और यह पता लगा सकते हैं कि एक त्रुटि है। आपको यह सुनिश्चित करना होगा कि onerror फ़ंक्शन को एक अलग स्क्रिप्ट टैग में परिभाषित किया गया है, न कि उस टैग में जिसमें त्रुटि मौजूद हो सकती है!

उदाहरण के लिए:

यह काम नहीं करेगा, क्योंकि स्क्रिप्ट जब त्रुटि फेंक दिया है अभी तक चालू करवाने के लिए है:

<script> 
    window.onerror = function (e) { 
    console.log('Error: ', e); 
    }; 
    console.log('a''); 
</script> 

यह काम करेगा:

<script> 
    window.onerror = function (e) { 
    console.log('Error: ', e); 
    }; 
</script> 
<script> 
    console.log('a''); 
</script> 

jsfiddle demo

0

जेएस दुनिया में, SyntaxError एक रनटाइम अपवाद हो सकता है। उदाहरण के लिए, जेएसओएन प्रतिक्रिया का विश्लेषण करने की कोशिश करते समय यह जेएसओएन प्रारूप नहीं है। सर्वर कई प्रकार के प्रतिक्रियाएं वापस भेज सकता है, इसलिए यदि आप अपने अनुरोध पर एचटीएमएल बॉडी प्रतिक्रिया भेजते हैं जो कि शरीर में जेएसओएन की अपेक्षा कर रहा है, तो आपको जेएस में फेंकने जा रहे हैं। ऐसे मामले में, आपको एक त्रुटि संदेश मिलेगा जो इस तरह कुछ दिखता है: SyntaxError: JSON Parse error: Unrecognized token '<'

लेकिन अन्य रनटाइम सिंटेक्सएरर्स भी हैं जो आप भी प्राप्त कर सकते हैं। मोज़िला में कुछ लोगों की एक सूची है: SyntaxErrors for JSON parsing

आप इन्हें अपने कोड में पकड़ना चाहेंगे। आप इस प्रकार का सामान्य आज़माएं/कैच ब्लॉक के साथ ऐसा कर सकते हैं:

try { 
    JSON.parse('<html></html>'); 
} catch (e) { 
    console.log("I catch & handle all errors the same way."); 
} 

या आप सिंटैक्स त्रुटि विशेष रूप से देखने के लिए कर सकते हैं:

try { 
    JSON.parse('<html></html>'); 
} catch (e) { 
    if (e instanceof SyntaxError) { 
    console.log("I caught a pesky SyntaxError! I'll handle it specifically here."); 
    } else { 
    console.log("I caught an error, but it wasn't a SyntaxError. I handle all non-SyntaxErrors here."); 
    } 
} 

मोज़िला और भी अधिक info on JS errors and handling them है।

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