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

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

Mary-Kate Olsen
リリース: 2024-12-02 15:55:11
オリジナル
876 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート