1. ホーム
  2. javascript

[解決済み] JavaScript 予期せぬ事態に対する可能な反復処理

2022-05-16 11:34:31

質問

次のようなコードがあります。

  for (i in awards) {
         if (awards[i] instanceof Array === false) {
               console.log(awards[i]);
                httpFactory.patch(awards[i], {"read": true}, false);
             }
       }

私のIDEは、上記のコードに関連して、このエラーを示しています。

予期しない(カスタム/継承された)メンバーに対する反復処理の可能性があります。 おそらく hasOwnProperty チェックが欠落しています。

JavaScript でフィルタリングされていない for-in ループのインスタンスがないかチェックします。この構成を使用すると この構成を使用すると、継承された、または予期しないプロパティが処理されます。 プロパティを処理することになります。自身のプロパティはhasOwnProperty()メソッドでフィルタリングする必要があります。 メソッドでフィルタリングする必要があります。この検証は、JavaScript、html、jspファイルで動作します。

この文の意味するところをもう少し詳しく説明していただけませんか?

どのように解決するのですか?

IDEはテストを追加することを推奨しています。

if (awards.hasOwnProperty(i)) {
    ...
}

の中に for ループの中にあります。

私は個人的に、これを行わないこと、そして可能であれば警告を無効にすることをお勧めします。 ほとんどのコードで必要ありませんし、ES5コードではさらに必要ありません。 Object.defineProperty

また hasOwnProperty に新しい (列挙可能な) プロパティを安全に追加した場合のみ、チェックが必要です。 Object.prototype に新しい (列挙可能な) プロパティを追加した場合のみ必要で、最も簡単な修正方法は を実行しないことです。 .

jQueryはこのテストを行いません - 彼らは 明示的に文書 の場合、jQuery は壊れるということを Object.prototype が安全でない方法で変更された場合、jQueryがブレークすることを明示的に文書化します。