"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi JSON.stringify renvoie-t-il un objet vide lors de la sérialisation d'une erreur ?

Pourquoi JSON.stringify renvoie-t-il un objet vide lors de la sérialisation d'une erreur ?

Publié le 2025-01-21
Parcourir:826

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

Est-il impossible de chaîner une erreur à l'aide de JSON.stringify ?

Tenter de sérialiser une instance d'erreur à l'aide de JSON.stringify entraîne la création d'un objet vide. Ce comportement provient des descripteurs de propriété cachés de l'erreur.

Pourquoi JSON.stringify échoue :

Les descripteurs de propriété pour les instances d'erreur sont définis avec enumerable: false, empêchant leur les propriétés ne sont pas incluses dans la stringification.

Exploration des propriétés et des descripteurs :

const error = new Error('sample message');
const propertyNames = Object.getOwnPropertyNames(error);
propertyNames.forEach(property => console.log(property, Object.getOwnPropertyDescriptor(error, property)));

Output:

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 }

Solution de contournement à l'aide d'Object.getOwnPropertyNames :

Pour inclure les propriétés d'erreur dans stringification, utilisez JSON.stringify(err, Object.getOwnPropertyNames(err)). Cela donne accès à des propriétés non énumérables.

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

Solutions de contournement supplémentaires :

  • Objets d'erreur personnalisés : Créez des objets d'erreur personnalisés avec les propriétés souhaitées et sérialisez celles-ci.
  • Extraction de propriétés : Extrayez manuellement les propriétés d'erreur spécifiques à l'aide de error.stack et error.message.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3