Maison > interface Web > js tutoriel > Pourquoi JSON.stringify renvoie-t-il un objet vide lors de la chaîne d'objets d'erreur natifs ?

Pourquoi JSON.stringify renvoie-t-il un objet vide lors de la chaîne d'objets d'erreur natifs ?

Barbara Streisand
Libérer: 2024-12-02 05:47:09
original
1039 Les gens l'ont consulté

Why Does JSON.stringify Return an Empty Object When Stringifying Native Error Objects?

JSON.stringify : Stringifying Native Error Messages

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é.

Exploration de l'anomalie

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: '{}'
Copier après la connexion

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']
Copier après la connexion

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);
}
Copier après la connexion

Une solution à l'énigme

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))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal