ES6 屬性的遍歷

ES6 一共有6種方法可以遍歷對象的屬性

( 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或字符串, 也不管是否可枚舉。


( 6) Reflect.enumerate(obj)
Reflect.enumerate 返回一個Iterator對象, 遍歷對象自身的和繼承的所有可枚舉屬性(不含Symbol屬性) , 與 for...in 循
環相同。

 

以上的6種方法遍歷對象的屬性, 都遵守同樣的屬性遍歷的次序規則。
首先遍歷所有屬性名爲數值的屬性, 按照數字排序。
其次遍歷所有屬性名爲字符串的屬性, 按照生成時間排序。
最後遍歷所有屬性名爲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屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章