Heim >Web-Frontend >js-Tutorial >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?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 15:55:11876Durchsuche

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)));

Ausgabe:

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 in die Stringifizierung einzubeziehen, 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 gewünschten Eigenschaften und serialisieren Sie diese.
  • Eigenschaftsextraktion:Extrahieren Bestimmte Fehlereigenschaften manuell mithilfe von error.stack und error.message.

Das obige ist der detaillierte Inhalt vonWarum gibt JSON.stringify beim Serialisieren eines Fehlers ein leeres Objekt zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn