ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript の「for...in」ループはオブジェクト プロパティをどのように反復処理するのでしょうか?また、継承されたプロパティを回避するにはどうすればよいですか?

JavaScript の「for...in」ループはオブジェクト プロパティをどのように反復処理するのでしょうか?また、継承されたプロパティを回避するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-25 04:16:17
オリジナル
188 人が閲覧しました

How Does JavaScript's `for...in` Loop Iterate Through Object Properties and How Can I Avoid Inherited Properties?

オブジェクト プロパティの反復処理

JavaScript では、オブジェクトのプロパティの反復処理は、多くの場合、for...in ループを使用して行われます。ただし、このループがどのように機能するかを理解することが重要です。

次のコードを考えてみましょう。

var obj = {
    name: "Simon",
    age: "20",
    clothing: {
        style: "simple",
        hipster: false
    }
}

for(var propt in obj){
    console.log(propt + ': ' + obj[propt]);
}
ログイン後にコピー

このコードは、propt 変数を使用して obj オブジェクトのプロパティをログに記録します。しかし、propt はこれらのプロパティをどのようにして知るのでしょうか?

propt について

propt 変数は、obj オブジェクト内の各プロパティ キーを表す一時変数です。ループが実行されると、オブジェクトのプロパティを反復処理し、各プロパティ キーを順番に propt に割り当てます。

これは、for...in ループが組み込みメソッドまたはプロパティではないためです。これは、オブジェクトの列挙可能なプロパティを反復処理する言語構造です。

The hasOwnProperty() Check

ただし、このアプローチには潜在的な問題があります。デフォルトでは、for...in ループはオブジェクトのプロトタイプ チェーンから継承されたプロパティも反復処理します。これを回避するには、次のような hasOwnProperty() チェックをループに追加することをお勧めします。

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

このチェックにより、obj オブジェクトに固有のプロパティのみがループに含まれることが保証されます。

あるいは、 hasOwnProperty() メソッドを直接呼び出すこともできます。 object:

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

このアプローチは、特に組み込みプロパティと同じ名前を持つ無関係なフィールドがオブジェクトに含まれている場合に、より安全です。

結論

for...in ループがオブジェクト プロパティを反復処理する方法と、継承されたプロパティを回避する方法を理解することで、プログラマーはオブジェクト データを効果的に操作できるようになります。 JavaScript。

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

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