一、Object.keys
定义:返回一个对象可枚举属性的字符串数组;
二、Object.getOwnPropertyNames
定义:返回一个对象可枚举、不可枚举属性的名称;
三、 共同点
都是返回自身的属性,不会返回原型链上的。都不会返回自身中Symbol值作为名称的属性。
(Reflect.ownKeys() 可以返回Symbol作为key的属性)
四、属性的可枚举性、不可枚举性
定义:可枚举属性是指那些内部 “可枚举” 标志设置为 true 的属性。对于通过直接的赋值和属性初始化的属性,该标识值默认为即为 true,对于通过 Object.defineProperty 等定义的属性,该标识值默认为 false。
1 | var obj = { "prop1": "v1" }; |
五、总结:
1、给对象直接赋值和属性初始化时,属性可枚举为true;通过Object.defineProperty定义的属性,可枚举为false;
2、Object.kes() 只返回对象可枚举的属性返回字符串数组;Object.getOwnPropertyNames() 返回可枚举和不可枚举的属性名称;
Reflect.ownKeys() 可以返回所有属性包括Symbol作为key的值。