ホームページ >ウェブフロントエンド >jsチュートリアル >「for...in」反復に予期しないプロパティが含まれる場合があるのはなぜですか?これを回避するにはどうすればよいですか?

「for...in」反復に予期しないプロパティが含まれる場合があるのはなぜですか?これを回避するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-24 12:49:11211ブラウズ

Why Does `for...in` Iteration Sometimes Include Unexpected Properties, and How Can I Avoid This?

オブジェクト プロパティの反復: Propt の謎を明らかにする

for...in ループを使用してオブジェクトのプロパティを反復処理する場合、 propt として知られる変数が出現します。この変数は、オブジェクトの各プロパティ キーを表します。しかし、なぜこのように機能するのでしょうか?

その理由は、Object.prototype にすべてのオブジェクトによって継承される追加のプロパティが含まれているためです。これらのプロパティは特定のオブジェクトの一部ではありませんが、すべてのオブジェクトで共有されます。たとえば、toString と hasOwnProperty は 2 つの一般的な例です。

これらの継承されたプロパティを誤って反復処理することを避けるために、追加のチェック Object.prototype.hasOwnProperty.call(obj, prop) を含めることが重要です。このチェックにより、反復処理されるプロパティがオブジェクトに固有に属し、基本クラスから継承されていないことが確認されます。

わかりやすくするために、更新されたコード サンプルを次に示します。

for (var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
        // do stuff
    }
}

さらに、代わりに obj.hasOwnProperty(prop) を使用することもできますが、オブジェクトに同じ名前の無関係なフィールドがある場合、このメソッドは誤動作する可能性があります。そのため、Object.prototype を介して hasOwnProperty を呼び出す方が信頼性が高くなります。

以上が「for...in」反復に予期しないプロパティが含まれる場合があるのはなぜですか?これを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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