2015-12-15 14 views
7

Ich benutze Knoten 4.2, und ich erhalte einen Fehler und JSON.stringify darauf verwenden. Für die meisten Objekte funktioniert das gut. Wenn jedoch ein [TypeError: callback ist keine Funktion] ausgelöst wird, wird ein leeres Objekt zurückgegeben. Wenn ich es direkt console.log, funktioniert es gut.Warum gibt JSON.stringify bei TypeError ein leeres Objekt zurück

Mozillas Seite sagt:

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 ein leeres Objekt sollte funktionieren, denke ich? – adeneo

+0

Und warum würden Sie es nicht direkt loggen, oder wie 'console.log ('error:', err)' – adeneo

+0

'console.log (JSON.stringify (TypeError, null, 2))' gibt mir undefined –

Antwort

9

Wenn Sie stringify auf einem Typeerror verwenden, Sie stringifying ein Objekt ohne enumerable Eigenschaften.

Also, wenn Sie

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

tun Wenn Sie console.log Protokoll verwenden, verwenden Sie valueOf, so

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

Auch ein Fehler weiß, wie sich in einen String zu drehen, so dass diese auch funktioniert:

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

Wenn Sie die Eigenschaften eines Objekts protokollieren möchten, das Sie nicht mit einem normalen Protokoll sehen können, können Sie das Objekt console.dir verwenden.

Wenn Sie es auf dem typeError tun, werden Sie sehen, dass es eine message Eigenschaft hat:

enter image description here

Verwandte Themen