2012-11-08 16 views
82
var err1 = Error('message'); 
var err2 = new Error('message'); 

क्या अंतर है? क्रोम कंसोल में उन्हें देखकर, वे समान दिखते हैं। ऑब्जेक्ट पर वही गुण और उसी __proto__ श्रृंखला। लगभग Error एक कारखाने की तरह काम करता है।फेंक त्रुटि ('msg') बनाम नई त्रुटि ('msg')

कौन सा सही है और क्यों?

+5

सभी देशी कंस्ट्रक्टर्स ECMAScript में परिभाषित कर रहे हैं जब 'नया' के बिना बुलाया व्यवहार। –

+2

यह भी देखें [त्रुटि() '?] (Http://stackoverflow.com/q/38759428/1048572) से 0 नई त्रुटि()' बेहतर क्यों है? – Bergi

उत्तर

82

दोनों ठीक हैं; इस स्पष्ट the specification में कहा गया है:

... इस प्रकार समारोह कॉल Error(…) एक ही तर्क के साथ ऑब्जेक्ट निर्माण अभिव्यक्ति new Error(…) के बराबर है।

+0

क्या यह ES6 में भी सच है? – paulmelnikow

11

Error एक कारखाने की तरह कार्य करता है, वास्तव में लगभग सभी देशी कंस्ट्रक्टर्स कार्य करें: Array, Object ... की तरह if (!(this instanceof Array)){ return new Array(arguments);}

सभी चेक कुछ जिसके अनुसार, एक त्रुटि के मामले में, यह और भी आवश्यक नहीं है एक Error वस्तु फेंक ... throw 'Bad things happened'; काम करेंगे, भी
तुम भी एक वस्तु डिबगिंग के लिए शाब्दिक फेंक कर सकते हैं: उनके संबंधित सहित

throw {message:"You've been a naughty boy", 
     context: this, 
     args: arguments, 
     more:'More custom info here'}; 
+3

मुझे डर है कि मैं पूरी तरह से सहमत नहीं हूं। 'स्ट्रिंग (" एबीसी ")' 'स्ट्रिंग 'ऑब्जेक्ट नहीं बनाता है, जबकि' नया स्ट्रिंग (" एबीसी ")' करता है। – pimvdb

+1

@pimvdb: सच है, मैंने इसे 'ऑब्जेक्ट' =>' ऑब्जेक्ट ('foo') में बदल दिया है, 'एक स्ट्रिंग ऑब्जेक्ट देता है ... इसकी बात आती है _ लगभग सभी मूल रचनाकार_ थोड़ा गलत है ...' संख्या ', 'बूलियन', 'दिनांक',' स्ट्रिंग 'सभी नहीं ...' ऐरे ',' ऑब्जेक्ट 'और' त्रुटि 'करते हैं, लेकिन' ईवेंट 'और सभी' डोमिक्सxx-एपीआई कन्स्ट्रक्टर त्रुटियों को फेंकते हैं –

+0

मैं भी लगता है कि 'नया ऐरे (तर्क)' बिल्कुल नहीं करता है 'ऐरे (1, 2, 3)' करता है। लेकिन शायद मैं सिर्फ नाइटपिक कर रहा हूं :) – pimvdb

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