„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum gibt JSON.stringify beim Serialisieren eines Fehlers ein leeres Objekt zurück?

Warum gibt JSON.stringify beim Serialisieren eines Fehlers ein leeres Objekt zurück?

Veröffentlicht am 21.01.2025
Durchsuche:118

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

Ist es unmöglich, einen Fehler mit JSON.stringify zu stringifizieren?

Der Versuch, eine Fehlerinstanz mit JSON.stringify zu serialisieren, führt zu einem leeren Objekt. Dieses Verhalten ergibt sich aus den versteckten Eigenschaftsdeskriptoren des Fehlers.

Warum JSON.stringify fehlschlägt:

Eigenschaftsdeskriptoren für Fehlerinstanzen werden mit enumerable: false festgelegt, wodurch deren verhindert wird Eigenschaften werden nicht in die Stringifizierung einbezogen.

Untersuchen von Eigenschaften und Deskriptoren:

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 }

Problemumgehung mit Object.getOwnPropertyNames:

Um Fehlereigenschaften einzuschließen Stringifizierung, verwenden Sie JSON.stringify(err, Object.getOwnPropertyNames(err)). Dies ermöglicht den Zugriff auf nicht aufzählbare Eigenschaften.

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

Zusätzliche Problemumgehungen:

  • Benutzerdefinierte Fehlerobjekte: Erstellen Sie benutzerdefinierte Fehlerobjekte mit den gewünschten Eigenschaften und Diese serialisieren.
  • Eigenschaftsextraktion: Extrahieren Sie bestimmte Fehlereigenschaften manuell mit error.stack und error.message.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3