Javascript遍历Object

56 阅读1分钟

Methods

  • for in
  • Object.keys
  • Object.values
  • Object.entries
  • Object.getOwnPropertyNames
  • Object.getOwnPropertySymbols
  • Object.getOwnPropertyDescriptors
  • Reflect.ownkeys

Examples

const obj = Object.create({ 
      a: {
        value: 0,
        enumerable: true
      },
      b: {
        value: 1,
        enumerable: false
      },
      [Symbol('c')]: {
        value: 2,
        enumerable: true
      },
      [Symbol('d')]: {
        value: 3,
        enumerable: false
      }
}, {
  e: {
      value: 4,
      enumerable: true,
  },
  f: {
      value: 5,
      enumerable: false
  },
  [Symbol('g')]: {
      value: 6,
      enumerable: true
  },
  [Symbol('h')]: {
      value: 7,
      enumerable: false
  }
})

for in

for(const key in obj) {
    console.log(key.toString())
}
// e
// a
// b

Object.keys

for(const key of Object.keys(obj)) {
    console.log(key.toString())
}
// e

Object.values

for(const value of Object.values(obj)) {
    console.log(value.toString())
}
// 4

Object.entries

for (const [key, value] of Object.entries(obj)) {
    console.log(key.toString(), value.toString())
}
// e 4

Object.getOwnPropertyNames

for(const key of Object.getOwnPropertyNames(obj)) {
    console.log(key.toString())
}
// e
// f

Object.getOwnPropertySymbols

for(const key of Object.getOwnPropertySymbols(obj)) {
    console.log(key.toString())
}
// Symbol(g)
// Symbol(h)

Object.getOwnPropertyDescriptors

console.log(Object.getOwnPropertyDescriptors(obj))
/*
{
  e: { value: 4, writable: false, enumerable: true, configurable: false },
  f: { value: 5, writable: false, enumerable: false, configurable: false },
  [Symbol(g)]: { value: 6, writable: false, enumerable: true, configurable: false },
  [Symbol(h)]: { value: 7, writable: false, enumerable: false, configurable: false }
}
*/

Reflect.ownkeys

for(const key of Reflect.ownKeys(obj)) {
    console.log(key.toString(), Object.getOwnPropertyDescriptor(obj, key))
}
/*
e { value: 4, writable: false, enumerable: true, configurable: false }
f { value: 5, writable: false, enumerable: false, configurable: false }
Symbol(g) { value: 6, writable: false, enumerable: true, configurable: false }
Symbol(h) { value: 7, writable: false, enumerable: false, configurable: false }
*/

Conclusion

原型自身
for in所有非Symbol属性非Symbol、enumerable属性
Object.keys非Symbol、enumerable属性
Object.values非Symbol、enumerable属性
Object.entries非Symbol、enumerable属性
Object.getOwnPropertyNames所有非Symbol属性
Object.getOwnPropertySymbols所有Symbol属性
Object.getOwnPropertyDescriptors所有属性
Reflect.ownKeys所有属性