es6现在多了好多遍历对象属性的方法,它们类似而又不同,现在一起来看看它们怎么玩,首先定义一个对象,自身属性为a,包含一个Symbol()属性,一个不可枚举属性b,并且原型链上设置了属性d:

上面的代码大致是这样子的:

background Layer 1 x a b Symbol() Object.prototype d

for...in

➀,➃:上下通吃,但是只能访问到最低权限的属性。

Object.keys(x)

➀:只能访问到同层的,同样只能访问到最低权限的属性。

Object.getOwnPropertyNames(x)

➀,➁:只能访问同层的,但是访问的权限稍微高一点,可以访问到不可枚举属性。

Object.getOwnPropertySymbols(x)

➂:同层的,只能访问Symbol属性。

Reflect.ownKeys(x)

➀,➁,➂:同层的,拥有最高访问权限,可以访问不可枚举和Symbol属性。

Object.getOwnPropertyDescriptors(x)

➀,➁,➂:同Reflect.ownKeys(x)。

访问范围关系大致如下:

background Layer 1 Object.keys() 同层,遍历普通属性 for...in 不同层,遍历普通属性 Object.getOwnPropertyNames 同层,可遍历不可枚举属性 Object. getOwnPropertySymbols 同层,遍历Symbol属性 Reflect.ownKeys Object. getOwnPropertyDescriptors 同层,可遍历不可枚举,Symbol属性

其他文章

0
我要评论

评论

返回
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

提交
还可以输入500个字