- Object.getOwnPropertyNames():一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
- Object.getOwnPropertySymbols():返回一个给定对象自身的所有 Symbol 属性的数组。
- Object.keys():返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致
- Reflect.ownKeys():返回一个由目标对象自身的属性键组成的数组
- for in:以任意顺序遍历一个对象的除 Symbol 以外的可枚举属性
let triangle = {
a: 1,
b: 2,
c: 3
}
function coloTriangle() {
this.color = 'red'
}
coloTriangle.prototype = triangle
let color = new coloTriangle()
Object.defineProperty(color, 'auto', {
value: 'auto2'
})
let symbolProp = Symbol('symbol')
color[symbolProp] = 'symbol'
console.info(Reflect.ownKeys(color))
console.info(Object.getOwnPropertyNames(color))
console.info(Object.getOwnPropertySymbols(color))
console.info(Object.keys(color))
for (let i in color) {
console.info(i)
}
| 方法 | 包含原型链上的属性 | 包含无法枚举属性 | 包含symbol类型属性 |
|---|
| Reflect.ownKeys | 不包含 | 包含 | 包含 |
| Object.getOwnPropertyNames | 不包含 | 包含 | 不包含 |
| Object.getOwnPropertySymbols | 不包含 | 包含 | 只包含 |
| Object.keys | 不包含 | 不包含 | 不包含 |
| for in | 包含 | 不包含 | 不包含 |