ホームページ >ウェブフロントエンド >jsチュートリアル >「for...in」反復に予期しないプロパティが含まれる場合があるのはなぜですか?これを回避するにはどうすればよいですか?
オブジェクト プロパティの反復: 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 サイトの他の関連記事を参照してください。