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 propriétés d'être incluses dans la stringification.
Explorer les propriétés et Descripteurs :
const error = new Error('sample message'); const propertyNames = Object.getOwnPropertyNames(error); propertyNames.forEach(property => console.log(property, Object.getOwnPropertyDescriptor(error, property)));
Sortie :
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 la 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 :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!