この記事の内容は、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));
があるとします。プログラムの出力結果は次のとおりです。
両方のメソッドは、オブジェクトの列挙可能な属性をすべて取得します。どちらの方法でも、列挙不可能なプロパティは取得できません。
以下はオブジェクト b であり、b はオブジェクト a のプロトタイプ オブジェクトとして使用されます:
var b = {bx: 1, by: 2}; Object.defineProperty(b, 'bz', {value: 3}); Object.setPrototypeOf(a, b);
上記のメソッドを使用して a のキー値を出力すると、結果は次のようになります:
出力結果から、for...in ループがプロトタイプ オブジェクト内のプロパティを含むオブジェクトの列挙可能なすべてのプロパティを走査できるのに対し、列挙可能なプロパティのみを走査できることを理解するのは難しくありません。オブジェクトのプロパティは Object.keys を通じて取得できます。この例の独自のプロパティなので、for...in を通じてオブジェクト独自のプロパティを取得したい場合は、hasOwnProperty メソッドを通じて結果をフィルタリングできます。
var keys = []; for (var key in a) { if (a.hasOwnProperty(key)) { keys.push(key); } }
Object.getOwnPropertyNames を通じてオブジェクト独自のプロパティを取得することもできます。
上記の出力から、getOwnPropertyNames メソッドによって出力された結果には、オブジェクトの列挙不可能なプロパティも含まれていることがわかります。プロパティが列挙可能かどうか。結果をフィルターするには:
以上がJavaScript でオブジェクトのプロパティを列挙するための for...in と Object.keys() の使用の違い (コードは添付されています)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。