尝试使用 JSON.stringify 序列化错误实例会导致空对象。此行为是由错误的隐藏属性描述符引起的。
为什么 JSON.stringify 失败:
错误实例的属性描述符设置为 enumerable: false,防止它们属性被包含在字符串化中。
探索属性和描述符:
const error = new Error('sample message'); const propertyNames = Object.getOwnPropertyNames(error); propertyNames.forEach(property => console.log(property, Object.getOwnPropertyDescriptor(error, property)));
输出:
stack { get: [Function], set: [Function], enumerable: false, configurable: true } arguments { value: undefined, writable: true, enumerable: false, configurable: true } type { value: 'custom message', writable: true, enumerable: false, configurable: true } message { value: 'custom message', writable: true, enumerable: false, configurable: true }
使用 Object.getOwnPropertyNames 的解决方法:
要在字符串化中包含错误属性,使用 JSON.stringify(错误, Object.getOwnPropertyNames(错误))。这提供了对不可枚举属性的访问。
const serializedError = JSON.stringify(error, Object.getOwnPropertyNames(error));
其他解决方法:
以上是为什么 JSON.stringify 在序列化错误时返回空对象?的详细内容。更多信息请关注PHP中文网其他相关文章!