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 键,按照加入时间升序排列。
相关文章
相关标签/搜索