为何JSON.stringify(new Error('huh'))不包含错误消息字段?
为什么
JSON.stringify(new Error('huh'))无法输出Error的message属性? 在Node.js(浏览器端JavaScript同理)中,调试文件打开错误的代码时,使用JSON.stringify()处理Error对象,会意外发现无法输出message属性。
Error对象本身包含以下字段:
- error.code
- error.message
- error.stack
示例代码(可在浏览器控制台或Node.js环境运行)
console.log(JSON.stringify(new Error('huh'))); // 输出:{}
但message字段确实存在,验证代码如下:
console.log(JSON.stringify(new Error('huh'))); // {} console.log((new Error('huh')).toString()); // Error: huh console.log((new Error('huh')).message); // huh
问题原因
Error类没有.toJSON方法,且JSON.stringify()默认仅序列化对象的可枚举属性,而Error的message字段并非可枚举属性:
Reflect.getOwnPropertyDescriptor(new Error('huh'), 'message').enumerable // 返回false
解决方案
如果要序列化Error对象的所有字段,可以使用JSON.stringify的第二个参数,传入对象的所有属性名:
let err = new Error('huh'); console.log('stringify: ' + JSON.stringify(err, Object.getOwnPropertyNames(err)));
内容的提问来源于stack exchange,提问作者PatS
相关产品推荐
相关产品推荐

