现有以下对象obj
1 | const obj = { |
Object.keys
es5中新增的方法,用来获取对象自身可枚举的属性键,组成一个数组。
1 | const objKeyList = Object.keys(obj); // ['id', 'key', 'name', 'label', 'value'] |
Object.getOwnPropertyNames
是es5中新增的方法,用来获取对象自身的全部属性名,组成一个数组。
1 | const objKeyList = Object.getOwnPropertyNames(obj); // ['id', 'key', 'name', 'label', 'value'] |
什么是可枚举属性
对象的每一个属性都有一个描述对象,用来描述和控制该属性的行为,使用Object.getOwnPropertyDescriptor
方法来获取该描述对象,同样是针对上面的对象 obj,如下
1 | Object.getOwnPropertyDescriptor(obj, 'name') |
上面方法仅为获取,如需设置描述对象则需使用 Object.defineProperty
方法,该方法返回创建的对象
获取结果的各属性释义
- configurable:表示能否通过delete删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为true
- enumerable: 表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,如果直接使用字面量定义对象,默认值为true
- writable: 能否修改属性的值,如果直接使用字面量定义对象,默认值为true
- value: 该属性对应的值,默认为undefined
方便加深理解及 defineProperty
的使用,参考如下代码
1 | let testObj = {}; |
不可枚举的属性在浏览器 console
中为淡红色,如下图