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

孝彬

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

Mozilla的页面显示:

根据传统的转换语义,布尔值,数字和字符串对象在字符串化过程中将转换为相应的原始值。

try {
    ...
} catch (err) {
    console.log('error: ' + JSON.stringify(err)) // outputs {}
}
尼科桑坦哥洛

stringifyTypeError上使用时,您正在对没有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属性:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章