JS 基础:遍历对象
for..in 循环
- 返回的是所有
可枚举的属性,包括实例和原型上的属性。 - 如果只需要获取对象的实例属性,可以联合使用
hasOwnProperty()进行过滤(过滤后等价Object.keys())。 - 不建议用来遍历
数组查阅 - 注意
for中的闭包问题
Object.keys()
- 返回的
实例里可枚举的属性的数组,不包括原型。 Object.values()返回实例里可枚举的属性值的数组,不包括原型。Object.entries()返回实例里可枚举的键值对的数组,不包括原型。
Object.getOwnPropertyNames()
- 返回的
实例里所有属性的数组,包括不可枚举属性,但不包括Symbol(注:Symbol可枚举),但不会获取原型上的属性。 Object.getOwnPropertySymbols()返回自身的Symol属性。
Reflect.ownKeys()
- 返回的
实例里所有属性的数组,包括不可枚举属性和Symbol。但不会获取原型上的属性。 - 基本等于
Object.getOwnPropertySymbols+Object.getOwnPropertyNames
题外话:for..of
- 适用范围:
iterable(Array, Map, Set, arguments等) - 返回迭代器
属性值 - 扩展运算符
(...)内部使用for...of循环