2015-12-15 10 views
7

लौटाता है मैं नोड 4.2 का उपयोग कर रहा हूं, और मुझे एक त्रुटि मिल रही है और JSON.stringify का उपयोग कर रहा है। ज्यादातर वस्तुओं के लिए, यह ठीक काम करता है। लेकिन जब एक [TypeError: कॉलबैक फ़ंक्शन नहीं है] फेंक दिया जाता है, तो यह एक खाली वस्तु देता है। अगर मैं इसे सीधे कंसोल करता हूं, तो यह ठीक काम करता है।टाइपऑरर पर JSON.stringify क्यों एक खाली ऑब्जेक्ट

मोज़िला पेज का कहना है:

Boolean, Number, and String objects are converted to the corresponding primitive values during stringification, in accord with the traditional conversion semantics.

try { 
    ... 
} catch (err) { 
    console.log('error: ' + JSON.stringify(err)) // outputs {} 
} 
+0

Stringifying एक खाली वस्तु काम करना चाहिए, मुझे लगता है कि:

जब आप इसे typeError पर करते हैं, आप इसे एक message संपत्ति है कि देखेंगे? – adeneo

+0

और आप इसे सीधे क्यों लॉग नहीं करेंगे, या 'console.log ('त्रुटि:', गलती '' – adeneo

+0

' console.log (JSON.stringify (TypeError, null, 2)) 'मुझे अपरिभाषित –

उत्तर

9

आप एक लेखन त्रुटि पर stringify का उपयोग करते हैं, तो आप कोई enumerable गुणों के साथ एक वस्तु stringifying रहे हैं।

तो अगर आप

var typeError = new TypeError("hey") 
for(var prop in typeError) { 
    console.log(prop) // this does not run 
} 

करना जब आप console.log का उपयोग कर प्रवेश करें, तो आप valueOf

var typeError = new TypeError("hey") 
typeError.valueOf() // TypeError: hey(…) 

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

var typeError = new TypeError("hey") 
typeError.toString() // "TypeError: hey" 

यदि आप किसी ऑब्जेक्ट के गुणों को लॉग करना चाहते हैं तो आप सामान्य लॉग का उपयोग नहीं देख सकते हैं, तो आप ऑब्जेक्ट console.dir ऑब्जेक्ट कर सकते हैं।

enter image description here

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