javascript--Object遍歷

摘自ES6入門-阮一峯

屬性的可枚舉性和遍歷

對象的每一個屬性都有一個描述對象(Descriptor),用來控制該屬性的行爲。Object.getOwnPropertyDescriptor方法能夠獲取該屬性的描述對象。es6

{
    value: 123,
    writable: true,
    enumerable: true,
    configurable: true
  }

描述對象的enumerable屬性,稱爲」可枚舉性「,若是該屬性爲false,就表示某些操做會忽略當前屬性。數組

目前,有四個操做會忽略enumerablefalse的屬性。spa

  • for...in循環:只遍歷對象自身的和繼承的可枚舉的屬性。
  • Object.keys():返回對象自身的全部可枚舉的屬性的鍵名。
  • JSON.stringify():只串行化對象自身的可枚舉的屬性。
  • Object.assign(): 忽略enumerablefalse的屬性,只拷貝對象自身的可枚舉的屬性。

其中,只有for...in會返回繼承的屬性,其餘三個方法都會忽略繼承的屬性,只處理對象自身的屬性。code

操做中引入繼承的屬性會讓問題複雜化,大多數時候,咱們只關心對象自身的屬性。因此,儘可能不要用for...in循環,而用Object.keys()代替。對象

 

屬性的遍歷

ES6 一共有 5 種方法能夠遍歷對象的屬性。繼承

(1)for...inip

for...in循環遍歷對象自身的和繼承的可枚舉屬性(不含 Symbol 屬性)。字符串

(2)Object.keys(obj)get

Object.keys返回一個數組,包括對象自身的(不含繼承的)全部可枚舉屬性(不含 Symbol 屬性)的鍵名。string

(3)Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames返回一個數組,包含對象自身的全部屬性(不含 Symbol 屬性,可是包括不可枚舉屬性)的鍵名。

(4)Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols返回一個數組,包含對象自身的全部 Symbol 屬性的鍵名。

(5)Reflect.ownKeys(obj)

Reflect.ownKeys返回一個數組,包含對象自身的全部鍵名,無論鍵名是 Symbol 或字符串,也無論是否可枚舉。

以上的 5 種方法遍歷對象的鍵名,都遵照一樣的屬性遍歷的次序規則。

  • 首先遍歷全部數值鍵,按照數值升序排列。
  • 其次遍歷全部字符串鍵,按照加入時間升序排列。
  • 最後遍歷全部 Symbol 鍵,按照加入時間升序排列。
相關文章
相關標籤/搜索