जेएस में यह जांचना संभव नहीं है कि किसी फ़ंक्शन को दिया गया तर्क वास्तव में 'त्रुटि' या त्रुटि का उदाहरण है।
उदाहरण के लिए, यह मान्य नहीं है:
typeof err === 'error'
चूंकि केवल 6 संभावित प्रकार हैं (तार के रूप में):
टाइपोफ़ ऑपरेटर एक स्ट्रिंग के रूप में जानकारी टाइप करता है। typeof
रिटर्न के छह संभावित मूल्य हैं :
"संख्या", "स्ट्रिंग", "बुलियन", "ऑब्जेक्ट", "फ़ंक्शन" और "अपरिभाषित"।
लेकिन क्या होगा अगर मेरे पास इस तरह का एक सरल उपयोग मामला है:
function errorHandler(err) {
if (typeof err === 'error') {
throw err;
}
else {
console.error('Unexpectedly, no error was passed to error handler. But here is the message:',err);
}
}
तो यह तय करने का सबसे अच्छा तरीका क्या है कि एक तर्क त्रुटि का एक उदाहरण है?
instanceof
किसी भी मदद के ऑपरेटर है?
err
एक iframe में (कहते हैं) फेंक दिया है, लेकिन फिर इसे हाथ में लेने के लिए मूल विंडो में पास करें, तो आपको मिल जाएगा (err instanceof Error) === false
। ऐसा इसलिए है क्योंकि iframe और उसकी मूल विंडो अलग, अलग Error
ऑब्जेक्ट प्रोटोटाइप है। इसी तरह एक वस्तु जैसे obj = {};
, जब एक अलग विंडो में चल रहे फ़ंक्शन को पास किया जाता है, तो चिल्लाना (obj instanceof Object)===false
। (सबसे बुरी बात यह है कि IE में, यदि आप इसकी विंडो के नष्ट होने या नेविगेट होने के बाद ओब्जेक्ट का संदर्भ रखते हैं, तो ऑब्जेक्ट प्रोटोटाइप फोंस को कॉल करने की कोशिश करने से obj.hasOwnProperty()
त्रुटियां होंगी!)
catch((err)=>{if (err === ENOENT)
रिटर्न में ENOENT is not defined
त्रुटि?
err instanceof Error