我正在使用节点4.2,我正在捕获错误并在其上使用JSON.stringify.对于大多数对象,这很好.但是当抛出[TypeError:callback不是函数]时,它返回一个空对象.如果我直接控制它.它可以正常工作.
Mozilla的页面说:
根据传统的转换语义,在字符串化期间将Boolean,Number和String对象转换为相应的原始值.
try { ... } catch (err) { console.log('error: ' + JSON.stringify(err)) // outputs {} }
nicosantange.. 10
当您stringify
在TypeError上使用时,您将对没有enumerable
属性的对象进行字符串化.
所以,如果你这样做
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
该对象.
当你在它上面做的时候typeError
,你会发现它有一个message
属性:
当您stringify
在TypeError上使用时,您将对没有enumerable
属性的对象进行字符串化.
所以,如果你这样做
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
该对象.
当你在它上面做的时候typeError
,你会发现它有一个message
属性: