文章目录
- 对象的遍历
对象的遍历
方法 | 描述 | 遍历不可枚举属性 | 遍历继承属性 | 遍历Symbol属性 |
---|---|---|---|---|
Object.keys(obj) Object.values(obj) Object.entries(obj) | 返回给定对象的自身可枚举属性组成的数组 | × | × | × |
for-in | 遍历对象的属性,包括原型链上的可枚举属性 | × | √ | × |
Object.getOwnPropertyNames() | 返回对象的自身属性的属性名,包括不可枚举属性 | √ | × | × |
Object.getOwnPropertySymbols() | 只获取对象的Symbol类型的键名 | × | × | √ |
Reflect.ownKeys(obj) | 获取对象的键值,包含不可迭代的key和symbol类型的key | √ | × | √ |
Object.keys() = for in + Object.hasOwnProperty()
Reflect.ownKeys() = Object.getOwnPropertyNames() + Object.getOwnPropertySymbols()
let data = { name: 'tim', age: 18, [Symbol()]: 123 };
console.log(Object.keys(data)); // [ 'name', 'age' ]
console.log(Object.values(data)); // [ 'tim', 18 ]
console.log(Object.entries(data)); // [ [ 'name', 'tim' ], [ 'age', 18 ] ]
对象遍历的次序规则
1.遍历所有数值键,按照数值升序排列。
2.遍历所有字符串键,按照加入时间升序排列。
3.遍历所有 Symbol 键,按照加入时间升序排列。
Reflect.ownKeys({ [Symbol()]:0, b: 0, 10: 0, 2: 0, a:0 })
// ['2', '10', 'b', 'a', Symbol()]