ES6オブジェクトのプロパティをトラバースする5つの方法があります。
1.for ...で
-
for...in
継承とオブジェクト自体をループは(除く属性を挙げることができるSymbol
プロパティ)。var o1 = { p1: 123 }; var o2 = Object.create(o1, { p2: { value: "abc", enumerable: true } }); for (p in o2) { console.info(p); } // p2 // p1
2.Object.keys(OBJ)
-
Object.keys
戻り値オブジェクト自身を含む配列、(継承されない)の特性は、(除くすべて列挙Symbol
プロパティ)キー名を。var o1 = { p1: 123 }; var o2 = Object.create(o1, { p2: { value: "abc", enumerable: true } }); console.log(Object.keys(o2)) //[p2]
3.Object.getOwnPropertyNames(OBJ)
-
Object.getOwnPropertyNames
戻り値は、すべてのオブジェクト自身のプロパティを含む配列(除くSymbol
キー名を、プロパティを含むが、属性を列挙されません)。var o1 = { p1: 123 }; var o2 = Object.create(o1, { p2: { value: "abc", enumerable: true } }); console.log(Object.getOwnPropertyNames(o2)) //[p2]
4.Object.getOwnPropertySymbols(OBJ)
Object.getOwnPropertySymbols
オブジェクト自体のシンボルのすべてのキー属性の名前を含む配列を返します。
5.Reflect.ownKeys(OBJ)
Reflect.ownKeys
関係なく、キー名の戻り値オブジェクト自体のすべてのキー名を含む配列を、Symbol
または文字列、列挙かどうか。
注文のキー対象を横断する6.上記5つの方法はプロパティ・トラバーサルの同じ規則の対象となっています。
-
まず、すべての数字キーによって、値の昇順に配置されました。
-
第二に、すべてのキーの文字列によって、時間の昇順に従って追加。
-
追加時間に応じて昇順ですべてのキーを通して最終的シンボル。
Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 }) // ['2', '10', 'b', 'a', Symbol()]