ホームページ >ウェブフロントエンド >jsチュートリアル >エラーをシリアル化するときに JSON.stringify が空のオブジェクトを返すのはなぜですか?

エラーをシリアル化するときに JSON.stringify が空のオブジェクトを返すのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-02 15:55:11891ブラウズ

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

JSON.stringify を使用してエラーを文字列化することは不可能ですか?

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

追加の回避策:

  • カスタム エラー オブジェクト: カスタム エラー オブジェクトを作成します。必要なプロパティを指定し、それらをシリアル化します。
  • プロパティ抽出: error.stack と error.message を使用して、特定のエラー プロパティを手動で抽出します。

以上がエラーをシリアル化するときに JSON.stringify が空のオブジェクトを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。