Dans le domaine du développement Web, la fonction JSON.stringify est un outil puissant pour convertir des objets JavaScript en chaînes JSON. Cependant, un comportement inhabituel se produit lors de la tentative de chaîner des objets Error natifs. Au lieu des informations d'erreur attendues, un objet vide est renvoyé.
Pour approfondir ce phénomène, considérez l'extrait de code suivant :
const error = new Error('simple error message'); console.log(JSON.stringify(error)); // Outputs: '{}'
Comme Comme démontré ci-dessus, JSON.stringify renvoie un objet vide, suggérant que les propriétés de l'objet Error natif ne sont pas stringifiées. Ce comportement provient du manque de propriétés énumérables dans les objets Error.
Pour vérifier cela, nous pouvons utiliser Object.getOwnPropertyNames pour récupérer les noms des propriétés définies dans un objet Error :
console.log(Object.getOwnPropertyNames(error)); // Outputs: ['stack', 'arguments', 'type', 'message']
Cependant, si nous inspectons les descripteurs de propriété, nous constatons que l'attribut énumérable est défini sur false pour tous propriétés :
for (var property in error) { var descriptor = Object.getOwnPropertyDescriptor(error, property); console.log(property, descriptor); }
Malgré le manque de propriétés énumérables, il existe une solution de contournement pour stringifier les objets d'erreur natifs à l'aide de JSON.stringify :
JSON.stringify(err, Object.getOwnPropertyNames(err))
En fournissant la liste des noms de propriétés comme deuxième argument à JSON.stringify, nous lui demandons explicitement de les inclure dans le processus de stringification, même s'ils sont non énumérable par défaut.
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!