属性的遍历方法

ES6 一共有 5 种方法可以遍历对象的属性。

1. for...in

遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

for (const key in obj) console.log(key);

2. Object.keys(obj)

返回一个数组,包含对象自身所有可枚举属性(不含 Symbol、不含原型链上的属性)。

3. Object.getOwnPropertyNames(obj)

返回一个数组,包含对象自身的所有属性名(含不可枚举,但不含 Symbol)。

4. Object.getOwnPropertySymbols(obj)

返回一个数组,包含对象自身的所有 Symbol 属性。

5. Reflect.ownKeys(obj)

返回一个数组,包含对象自身的所有属性键(含字符串 + Symbol,含不可枚举)。

遍历次序规则

上述遍历,都遵守同样的属性遍历次序规则:

  • 先按升序遍历所有数值键(整数索引按数值大小排序)。
  • 再按插入顺序遍历所有字符串键。
  • 最后按插入顺序遍历所有 Symbol 键。
Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
// ['2', '10', 'b', 'a', Symbol()]

来源整理自:vue3js.cn 面试官系列