You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 07:03:19