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

2024-01-29

我正在使用节点 4.2,并且捕获错误并在其上使用 JSON.stringify。对于大多数对象来说,这都可以正常工作。但是当抛出 [TypeError:callback is not a function] 时,它会返回一个空对象。如果我直接console.log它,它工作得很好。

Mozilla 的页面显示:

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

try {
    ...
} catch (err) {
    console.log('error: ' + JSON.stringify(err)) // outputs {}
}

当你使用stringify在 TypeError 上,您正在对一个对象进行字符串化,但没有enumerable https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Enumerable_attribute特性。

所以如果你这样做

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

当您使用登录时console.log,你正在使用valueOf, so

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

另外,错误知道如何将自身转换为字符串,因此这也有效:

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

如果您想记录使用普通日志无法看到的对象的属性,您可以console.dir https://developer.mozilla.org/en-US/docs/Web/API/Console/dir物体。

当你在typeError,你会看到它有一个message财产:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 TypeError 上的 JSON.stringify 返回一个空对象[重复] 的相关文章

随机推荐