【1】for in(获得可枚举的属性)(不含Symbol属性)
- 使用 for in 循环遍历对象的属性时,原型链上的所有属性都将被访问
![](https://img.haomeiwen.com/i14173157/4d14e57bc19c2fb0.png)
-
推荐总是使用 hasOwnProperty 方法, 这将会避免原型对象扩展带来的干扰:
2.png
【2】Object.keys()(不含Symbol属性)
var obj = { } ;
-
Object.keys(obj) 返回一个该对象属性名(不含继承的、可枚举的)组成的字符串数组
-
item 为该对象的属性名
-
obj [ item ] 返回对应的属性值 【必须使用方括号法 因为Object.keys(obj)返回的属性名是字符串类型】
【3】Object.getOwnPropertyNames(obj)(不含Symbol属性)
- 返回一个该对象属性名(可枚举的&不可枚举的)组成的字符串数组
其他与Object.keys() 基本相同
2/3的区别:https://blog.csdn.net/sinat_36246371/article/details/88064877
【4】Reflect.ownKeys(obj)(含Symbol属性)
- 返回一个由目标对象自身的属性键组成的数组。它的返回值等同于Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target))。
(不管属性名是Symbol或字符串,也不管是否可枚举.)
参考:
https://www.jianshu.com/p/320254a783cc
https://blog.csdn.net/qq_40963664/article/details/83063040
网友评论