主要是回顧下基礎知識,像這種獲取對象屬性集合的方法不少,以前記憶有點混淆了,寫個實驗代碼,而後記錄下。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