ES6 一共有5种方法可以遍历对象的属性。
(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 或字符串,也不管是否可枚举。
总结表格:
继承 | 不可枚举属性 | Symbol 属性 | 方式 | |
---|---|---|---|---|
for...in | √ | × | × | 循环遍历 |
Object.keys(obj) | × | × | × | 返回数组 |
Object.getOwnPropertyNames(obj) | × | √ | × | 返回数组 |
Object.getOwnPropertySymbols(obj) | × | × | √ | 返回数组 |
Reflect.ownKeys(obj) | × | √ | √ | 返回数组 |