ホームページ > ウェブフロントエンド > jsチュートリアル > ネイティブ エラー オブジェクトを文字列化すると、JSON.stringify が空のオブジェクトを返すのはなぜですか?

ネイティブ エラー オブジェクトを文字列化すると、JSON.stringify が空のオブジェクトを返すのはなぜですか?

Barbara Streisand
リリース: 2024-12-02 05:47:09
オリジナル
1039 人が閲覧しました

Why Does JSON.stringify Return an Empty Object When Stringifying Native Error Objects?

JSON.stringify: ネイティブ エラー メッセージの文字列化

Web 開発の分野では、JSON.stringify 関数は JavaScript オブジェクトを JSON 文字列に変換するための強力なツールです。ただし、ネイティブ Error オブジェクトを文字列化しようとすると、異常な動作が発生します。予期されたエラー情報の代わりに、空のオブジェクトが返されます。

異常の調査

この現象を詳しく調べるには、次のコード スニペットを検討してください。

const error = new Error('simple error message');
console.log(JSON.stringify(error)); // Outputs: '{}'
ログイン後にコピー

As上で示したように、JSON.stringify は空のオブジェクトを返し、ネイティブ Error オブジェクトのプロパティが文字列化されていないことを示しています。この動作は、Error オブジェクトに列挙可能なプロパティがないことが原因です。

これを確認するには、Object.getOwnPropertyNames を使用して、Error オブジェクトで定義されているプロパティの名前を取得できます。

console.log(Object.getOwnPropertyNames(error)); // Outputs: ['stack', 'arguments', 'type', 'message']
ログイン後にコピー

しかし、プロパティ記述子を検査すると、すべての列挙可能属性が false に設定されていることがわかります。 property:

for (var property in error) {
  var descriptor = Object.getOwnPropertyDescriptor(error, property);
  console.log(property, descriptor);
}
ログイン後にコピー

謎に対する解決策

列挙可能なプロパティが不足しているにもかかわらず、JSON.stringify:

JSON.stringify(err, Object.getOwnPropertyNames(err))
ログイン後にコピー
プロパティ名のリストを JSON.stringify の 2 番目の引数として指定することで、それらを JSON.stringify に含めるように明示的に指示します。デフォルトでは列挙可能ではありませんが、文字列化プロセス。

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

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