我正在使用节点 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(使用前将#替换为@)