ホームページ > ウェブフロントエンド > jsチュートリアル > 「for...in」を使用して JavaScript でオブジェクト プロパティを安全に反復するにはどうすればよいですか?

「for...in」を使用して JavaScript でオブジェクト プロパティを安全に反復するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-29 20:37:18
オリジナル
198 人が閲覧しました

How Can I Safely Iterate Over Object Properties in JavaScript Using `for...in`?

for...in を使用したオブジェクト プロパティの反復

for...in ループを使用してオブジェクト プロパティを反復する場合、ループ変数propt は、アクセスされるプロパティのキーを表します。ただし、これはオブジェクトの組み込みメソッドまたはプロパティではありません。

for...in ループは、オブジェクト自体からのプロパティと、そのプロトタイプから継承されたプロパティの両方を取得します。継承されたプロパティは反復に含めることを意図していない可能性があるため、これは問題となる可能性があります。

正確な反復のための hasOwnProperty の使用

この問題を回避するには、次のように追加できます。 for...in ループ内の hasOwnProperty チェック:

for (var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
        // Do stuff
    }
}
ログイン後にコピー

hasOwnProperty メソッドは、プロパティがプロトタイプから継承されずに、オブジェクト内で直接定義されているかどうかを確認します。このチェックを使用すると、反復から継承されたプロパティを除外できます。

hasOwnProperty とオブジェクトを介した呼び出し

または、オブジェクト自体を介して hasOwnProperty を呼び出すこともできます。

if (obj.hasOwnProperty(prop)) {
    // Do stuff
}
ログイン後にコピー

ただし、オブジェクトに無関係なフィールドがある場合、これは失敗する可能性がありますhasOwnProperty と同じ名前 (例:

var obj = { foo: 42, hasOwnProperty: 'lol' };
obj.hasOwnProperty('foo'); // TypeError
ログイン後にコピー

) この問題を回避するには、代わりに Object.prototype を通じて hasOwnProperty を呼び出す方が安全です:

Object.prototype.hasOwnProperty.call(obj, 'foo'); // True
ログイン後にコピー

以上が「for...in」を使用して JavaScript でオブジェクト プロパティを安全に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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