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())
}
Object.keys
for(const key of Object.keys(obj)) {
console.log(key.toString())
}
Object.values
for(const value of Object.values(obj)) {
console.log(value.toString())
}
Object.entries
for (const [key, value] of Object.entries(obj)) {
console.log(key.toString(), value.toString())
}
Object.getOwnPropertyNames
for(const key of Object.getOwnPropertyNames(obj)) {
console.log(key.toString())
}
Object.getOwnPropertySymbols
for(const key of Object.getOwnPropertySymbols(obj)) {
console.log(key.toString())
}
Object.getOwnPropertyDescriptors
console.log(Object.getOwnPropertyDescriptors(obj))
Reflect.ownkeys
for(const key of Reflect.ownKeys(obj)) {
console.log(key.toString(), Object.getOwnPropertyDescriptor(obj, key))
}
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 | ❌ | 所有属性 |