1. 程式人生 > >es6 javascript屬性的遍歷

es6 javascript屬性的遍歷

ES6 一共有 5 種方法可以遍歷物件的屬性。

( 1 ) for...in
for...in迴圈遍歷物件自身的和繼承的可列舉屬性(不含 Symbol 屬性)。
( 2 ) Object.keys(obj)
Object.keys返回一個數組,包括物件自身的(不含繼承的)所有可列舉屬性(不含 Symbol 屬性)。
( 3 ) Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一個數組,包含物件自身的所有屬性(不含 Symbol 屬性,但是包括不可列舉屬性)。
( 4 ) Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一個數組,包含物件自身的所有 Symbol 屬性。
( 5 ) Reflect.ownKeys(obj)
Reflect.ownKeys返回一個數組,包含物件自身的所有屬性,不管是屬性名是 Symbol 或字串,也不管是否可列舉。

以上的 5 種方法遍歷物件的屬性,都遵守同樣的屬性遍歷的次序規則。

首先遍歷所有屬性名為數值的屬性,按照數字排序。
其次遍歷所有屬性名為字串的屬性,按照生成時間排序。
最後遍歷所有屬性名為 Symbol 值的屬性,按照生成時間排序。

Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
// ['2', '10', 'b', 'a', Symbol()]
上面程式碼中,Reflect.ownKeys方法返回一個數組,包含了引數物件的所有屬性。這個陣列的屬性次序是這樣的,首先是數值屬性2和10,其次是字串屬性b和a,最後是 Symbol 屬性。