为什么TypeError上的JSON.stringify返回一个空对象

Hyo*_*yun 7 javascript json node.js

我正在使用节点4.2,我正在捕获错误并在其上使用JSON.stringify.对于大多数对象,这很好.但是当抛出[TypeError:callback不是函数]时,它返回一个空对象.如果我直接控制它.它可以正常工作.

Mozilla的页面说:

根据传统的转换语义,在字符串化期间将Boolean,Number和String对象转换为相应的原始值.

try {
    ...
} catch (err) {
    console.log('error: ' + JSON.stringify(err)) // outputs {}
}
Run Code Online (Sandbox Code Playgroud)

nic*_*elo 10

当您stringify在TypeError上使用时,您将对没有enumerable属性的对象进行字符串化.

所以,如果你这样做

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

当你使用日志时console.log,你正在使用valueOf,所以

var typeError = new TypeError("hey")
typeError.valueOf()  // TypeError: hey(…)
Run Code Online (Sandbox Code Playgroud)

此外,错误知道如何将自己变成一个字符串,所以这也适用:

var typeError = new TypeError("hey")
typeError.toString() // "TypeError: hey"
Run Code Online (Sandbox Code Playgroud)

如果要记录使用普通日志无法看到的对象的属性,则可以使用console.dir该对象.

当你在它上面做的时候typeError,你会发现它有一个message属性:

在此输入图像描述