«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему JSON.stringify возвращает пустой объект при сериализации ошибки?

Почему JSON.stringify возвращает пустой объект при сериализации ошибки?

Опубликовано 21 января 2025 г.
Просматривать:342

Why Does JSON.stringify Return an Empty Object When Serializing an Error?

Невозможно ли преобразовать ошибку в строку с помощью JSON.stringify?

Попытка сериализовать экземпляр ошибки с помощью 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(err, Object.getOwnPropertyNames(err)). Это обеспечивает доступ к неперечисляемым свойствам.

const serializedError = JSON.stringify(error, Object.getOwnPropertyNames(error));

Дополнительные обходные пути:

  • Пользовательские объекты ошибок: Создавайте собственные объекты ошибок с нужными свойства и сериализовать их.
  • Извлечение свойств: Извлеките определенные свойства ошибок вручную, используя error.stack и error.message.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3