2011-02-07 6 views
33

के लिए जांचें मैं जानना चाहता हूं कि जावास्क्रिप्ट के माध्यम से खोजना संभव है यदि किसी कॉल को eval() में सिंटैक्स त्रुटि या अपरिभाषित चर है, तो ... मान लें कि मैं कुछ मनमाने ढंग से eval का उपयोग करता हूं जावास्क्रिप्ट उस eval के त्रुटि आउटपुट को पकड़ने का एक तरीका है?eval जावास्क्रिप्ट, सिंटैक्स त्रुटि

उत्तर

49

आप यह देखने के लिए जांच सकते हैं कि कोई त्रुटि वास्तव में एक सिंटेक्स त्रुटि है या नहीं।

try { 
    eval(code); 
} catch (e) { 
    if (e instanceof SyntaxError) { 
     alert(e.message); 
    } 
} 
+0

मुझे आश्चर्य है कि मैंने इसे स्वयं क्यों नहीं किया। आपका बहुत बहुत धन्यवाद! –

+3

@ जेसस - तथ्य यह है कि आप सोच रहे हैं एक अच्छी बात है। वैसे भी, शुभकामनाएँ। – ChaosPandion

0

Mozilla documentation for eval के अनुसार:

eval का मूल्यांकन पिछले अभिव्यक्ति की मान देता है।

तो मुझे लगता है कि आप भाग्य से बाहर हो सकते हैं। यह वही दस्तावेज़ eval:

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

इस पर ध्यान दिए बिना, कृपया इस फ़ंक्शन का उपयोग करने से पहले जोखिमों से अवगत रहें।

+2

बुराई होने के बारे में, सुनहरा नियम: उपयोगकर्ता इनपुट को न खोलें, केवल उन्हीं तारों को निकालें जिन्हें आपने स्वयं परिभाषित किया है, उदाहरण के लिए: सर्वर से। हां, एमआईटीएम हमला, लेकिन यदि आप अपने सर्वर पर भरोसा नहीं कर सकते हैं, तो आपको बड़ी समस्याएं हैं। JSLint के लिए – CularBytes

1

आप http://www.jslint.com/ का उपयोग कर सकते हैं जिसमें जावास्क्रिप्ट पार्सर लिखित एन जावास्क्रिप्ट शामिल है। यह आपको आपके कोड के बारे में बहुत सारी जानकारी देगा, इसे अधिक आराम से या नहीं, आदि के लिए कॉन्फ़िगर किया जा सकता है ...

+0

+1। :-) – Martijn

+0

http://www.jshint.com भी अच्छा है। – Andrew

11

विशेष प्रकार की त्रुटि को पकड़ने के लिए प्रयास करने का प्रयास करते समय किसी को यह सुनिश्चित करना चाहिए कि अन्य प्रकार के अपवाद नहीं हैं दबा। अन्यथा यदि मूल्यांकन कोड एक अलग तरह का अपवाद फेंक देगा तो यह गायब हो सकता है और कोड के अप्रत्याशित व्यवहार का कारण बन सकता है।

मैं इस तरह कोड writting सुझाव है:

try { 
    eval(code); 
} catch (e) { 
    if (e instanceof SyntaxError) { 
     alert(e.message); 
    } else { 
     throw(e); 
    } 
} 

कृपया ध्यान दें "और" खंड।

+0

फेंक एक समारोह नहीं है – Dev