遍历对象
E S 6 一共有 5 种方法能够遍历对象的属性 。
- for … in
for . . . in 轮回遍历对象本身的和继续的可罗列属性(不含 Symbol 属性)。
- Object.keys(obj)
Object . keys 返回 一个数组,包括对象本身的(不含继续的 )一切可罗列属性(不含 Symbol 属性)
- Object . getOwnPropertyNames(obj)
Object . getOwnPropertyNames 返回 一个数组,包括对象本身的一切属性(不含 Symbol 属性,然则包括不可罗列属性)
Object.getOwnPropertySymbols(obj)
Object . getOwnPropertySymbols 返回 一个数组,包括对象本身的一切 Symbo l 属性 。
- Reflect .ownKeys(obj)
Reflect . ownKeys 返回 一个数组,包括对象本身 的一切属性 , 不论属性名是 Symbol 还 是字符串 , 也不论是不是可罗列 。
以上 5 种方法遍历对象的属性时都恪守一样的属性遍历序次划定规矩 。
- 起首遍历一切属性名为数值的属性 , 根据数字排序 。
- 其次遍历一切属性名为字符串的属性,根据天生时候排序。
- 末了遍历一切属性名为 Symbol 值的属性 , 根据天生时候排序。
总结以下:
属性范例 | for … in | Object.keys(obj) | Object . getOwn-Property-Names(obj) | Object.getOwn-Property-Symbols(obj) | Reflect .ownKeys(obj) |
---|---|---|---|---|---|
原型链 | 是 | 否 | 否 | 否 | 否 |
Symbol | 否 | 否 | 否 | 是 | 是 |
不可罗列 | 否 | 否 | 是 | 是 | 是 |
可罗列 | 是 | 是 | 是 | 是 | 是 |
一般 | 是 | 是 | 是 | 否 | 是 |