主要是回顾下基础知识,像这种获取对象属性集合的方法不少,以前记忆有点混淆了,写个实验代码,而后记录下。markdown
let obj = Object.create({ e: 5, }) obj.a = 1 obj.b = 2 obj[Symbol('c')] = 3 Reflect.defineProperty(obj, 'd', { enumerable: false, value: 4, }) // for in for (let key in obj) { console.log(key) // a, b, e } // Object.keys console.log(Object.keys(obj)) // [ 'a', 'b' ] // getOwnPropertyNames console.log(Object.getOwnPropertyNames(obj)) // [ 'a', 'b', 'd' ] // ownKeys console.log(Reflect.ownKeys(obj)) // [ 'a', 'b', 'd', Symbol(c) ] 复制代码
方法/属性 | 可枚举 | 不可枚举 | Symbol | 原型 |
---|---|---|---|---|
for in | 是 | 否 | 否 | 是 |
Object.keys() | 是 | 否 | 否 | 否 |
Object.getOwnPropertyNames | 是 | 是 | 否 | 否 |
Reflect.ownKeys | 是 | 是 | 是 | 否 |
通常获取可枚举属性用Object.keys()就行了(若是想获取属性和值用Object.assign() )。若是想获取到原型上的枚举属性再用for in。测试
若是想获取自身的全部属性包括不可枚举的属性,推荐用Reflect.ownKeys。Reflect将来会替代掉Object的一些方法。spa