2015-12-15 6 views
7

ノード4.2を使用していますが、エラーが発生し、JSON.stringifyを使用しています。ほとんどのオブジェクトでは、これは正常に動作します。しかし、[TypeError:コールバックが関数ではない]がスローされると、空のオブジェクトを返します。私はそれを直接console.log場合、それは正常に動作します。TypeErrorのJSON.stringifyで空のオブジェクトが返されるのはなぜですか?

Mozillaのページは言う:

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

は空のオブジェクトが動作するはず文字列化、私はと思いますか? – adeneo

+0

なぜ、直接コンソールにログを記録しないのですか? 'console.log( 'error:'、err)' – adeneo

+0

'console.log(JSON.stringify(TypeError、null、2))'は私に定義されていません –

答えて

9

あなたはTypeError例外でstringifyを使用する場合は、あなたがいないenumerableプロパティを持つオブジェクトを文字列化しています。

あなたがconsole.logを使用して

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

ログインしないとき場合は、valueOfを使用しているので、そう

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

はまた、エラーが文字列に自分自身をオンにする方法を知っているので、このあまりにも動作します:

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

通常のログでは見えないオブジェクトのプロパティをログに記録する場合は、console.dirオブジェクトを使用できます。

あなたはtypeErrorでそれを行うと、あなたはそれがmessage性質を持っていることがわかります:

enter image description here

関連する問題