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:
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!