JavaScript でオブジェクトのプロパティを列挙するための for...in と Object.keys() の使用の違い (コードは添付されています)

不言
リリース: 2019-03-18 11:34:16
転載
2732 人が閲覧しました

この記事の内容は、JavaScript でオブジェクトのプロパティを列挙するための for...in と Object.keys() の違いについてです (コード付き)。これには一定の参考値があります。必要な友人は参考にしてください。お役に立てば幸いです。

for...in ループと Object.keys メソッドの両方を使用してオブジェクトのプロパティを取得できます。では、これらの違いは何でしょうか?オブジェクト a:

var a = {x: 1, y: 2};
Object.defineProperty(a, 'z', {value: 3}); // 定义不可枚举属性z
var keys = [];
for (var key in a) {
    keys.push(key);
}
console.log(keys);
console.log(Object.keys(a));
ログイン後にコピー

があるとします。プログラムの出力結果は次のとおりです。

JavaScript でオブジェクトのプロパティを列挙するための for...in と Object.keys() の使用の違い (コードは添付されています)

両方のメソッドは、オブジェクトの列挙可能な属性をすべて取得します。どちらの方法でも、列挙不可能なプロパティは取得できません。
以下はオブジェクト b であり、b はオブジェクト a のプロトタイプ オブジェクトとして使用されます:

var b = {bx: 1, by: 2};
Object.defineProperty(b, 'bz', {value: 3});
Object.setPrototypeOf(a, b);
ログイン後にコピー

上記のメソッドを使用して a のキー値を出力すると、結果は次のようになります:

JavaScript でオブジェクトのプロパティを列挙するための for...in と Object.keys() の使用の違い (コードは添付されています)

出力結果から、for...in ループがプロトタイプ オブジェクト内のプロパティを含むオブジェクトの列挙可能なすべてのプロパティを走査できるのに対し、列挙可能なプロパティのみを走査できることを理解するのは難しくありません。オブジェクトのプロパティは Object.keys を通じて取得できます。この例の独自のプロパティなので、for...in を通じてオブジェクト独自のプロパティを取得したい場合は、hasOwnProperty メソッドを通じて結果をフィルタリングできます。

var keys = [];
for (var key in a) {
    if (a.hasOwnProperty(key)) {
        keys.push(key);
    }
}
ログイン後にコピー

Object.getOwnPropertyNames を通じてオブジェクト独自のプロパティを取得することもできます。

JavaScript でオブジェクトのプロパティを列挙するための for...in と Object.keys() の使用の違い (コードは添付されています)

上記の出力から、getOwnPropertyNames メソッドによって出力された結果には、オブジェクトの列挙不可能なプロパティも含まれていることがわかります。プロパティが列挙可能かどうか。結果をフィルターするには:

JavaScript でオブジェクトのプロパティを列挙するための for...in と Object.keys() の使用の違い (コードは添付されています)

以上がJavaScript でオブジェクトのプロパティを列挙するための for...in と Object.keys() の使用の違い (コードは添付されています)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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