JSON.stringify を使用してエラー インスタンスをシリアル化しようとすると、空のオブジェクトが生成されます。この動作は、エラーの非表示のプロパティ記述子から発生します。
JSON.stringify が失敗する理由:
エラー インスタンスのプロパティ記述子は enumerable: false で設定されており、エラー インスタンスのプロパティ記述子が失敗するのを防ぎます。プロパティが文字列化に含まれないようにします。
プロパティの探索と記述子:
const error = new Error('sample message'); const propertyNames = Object.getOwnPropertyNames(error); propertyNames.forEach(property => console.log(property, Object.getOwnPropertyDescriptor(error, property)));
出力:
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 }
Object.getOwnPropertyNames を使用した回避策:
文字列化にエラー プロパティを含めるには、 JSON.stringify(err, Object.getOwnPropertyNames(err))。これにより、列挙不可能なプロパティへのアクセスが可能になります。
const serializedError = JSON.stringify(error, Object.getOwnPropertyNames(error));
追加の回避策:
以上がエラーをシリアル化するときに JSON.stringify が空のオブジェクトを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。