2013-08-16 11 views
14

मैं इस तथ्य से रहस्यमय हूं कि जब मैं एक नई त्रुटि वस्तु बनाता हूं तो मैं उसका संदेश या नाम देख सकता हूं, लेकिन मैं मानक तरीकों का उपयोग कर अपनी चाबियों की एक सूची नहीं देख सकता। ऐसा क्यों है?मैं त्रुटि ऑब्जेक्ट की कुंजी क्यों नहीं देख सकता हूं?

> err = new Error("an error") 
[Error: an error] 
> err.message 
'an error' 
> err.name 
'Error' 
> Object.keys(err) 
[] 
> JSON.stringify(err) 
'{}' 
+11

कोशिश 'Object.getOwnPropertyNames()' के बजाय 'Object.keys() '। वे गैर-गणना योग्य हो सकते हैं। –

+3

उदाहरण के तौर पर, 'Object.getOwnPropertyDescriptor (err,' stack ')' दिखाता है 'संख्यात्मक: झूठा'। – apsillers

उत्तर

13

जावास्क्रिप्ट गुण गैर गणनीय, वे for..in छोरों या Object.keys परिणामों में प्रकट नहीं होता है जिसका मतलब है कि हो सकता है।

आप किसी ऑब्जेक्ट पर सीधे सभी गुण (संख्यात्मक या गैर-गणना योग्य) प्राप्त करने के लिए Object.getOwnPropertyNames का उपयोग कर सकते हैं। मैं "सीधे" कहता हूं क्योंकि सामान्य गणना ऑब्जेक्ट की प्रोटोटाइप श्रृंखला को मूल प्रोटोटाइप पर संख्यात्मक गुण प्राप्त करने के लिए देखती है, जबकि getOwnPropertyNames नहीं है।

इस प्रकार, Object.getOwnPropertyNames(err) केवल पता चलता

['stack', 
'arguments', 
'type', 
'message'] 

name संपत्ति Error.prototype की एक गैर गणनीय संपत्ति है और एक Error उदाहरण पर सीधे सेट नहीं है। (प्रोटोटाइप संक्षिप्त: जब आप err.name तक पहुँचने का प्रयास, देखने err कुछ भी नहीं जाता है, तो दुभाषिया Error.prototype पर लग रहा है, जो एक name संपत्ति है।)

+1

Node.js V8 का उपयोग करता है जो किसी भी बिंदु पर व्याख्या नहीं करता है: पी – Esailija

+0

मैं अभी भी फ़ायरफ़ॉक्स 45 में 'स्टैक' प्रॉपर्टी नहीं देख सकता: 'e = नई त्रुटि (" हाय! "); Object.getOwnPropertyNames (ई); // ऐरे ["फ़ाइल नाम", "लाइन नम्बर", "कॉलम नम्बर", "संदेश"] '। –

+0

@kiroh मेरे पास फ़ायरफ़ॉक्स पर परीक्षण करने के लिए नहीं है, लेकिन 'Object.getOwnPropertyNames (Object.getPrototypeOf (err)) क्या है? हो सकता है कि फ़ायरफ़ॉक्स 'स्टैक' में विरासत में प्रवेशकर्ता संपत्ति हो। ('ऑब्जेक्ट.getOwnPropertyDescriptor (Object.getPrototypeOf (err), "stack") के साथ इसकी पुष्टि करें और 'get' और' set' गुणों की जांच करें।) – apsillers

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

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