| 原型链(是否可以获取原型链上的属性) | 可枚举(是否可以获取不可枚举的属性) | Symbols(是否可以获取Symbols标记的属性) |
|---|
| for...in | true | false | false |
| Object.keys(obj) | false | false | false |
| Object.getOwnPropertyNames(obj) | false | true | false |
| Reflect.ownKeys(obj) | false | true | true |
const animal = {
A: 1,
B: 2,
C: 3,
}
const cat = {
D: 4,
E: 5,
[Symbol()]: 6,
}
cat.__proto__ = animal
Object.defineProperty(cat, "E", { enumerable: false });
for (let attrs in cat) {
console.log("for...in:", attrs)
}
console.log("Object.keys:", Object.keys(cat))
console.log("Object.getOwnPropertyNames:", Object.getOwnPropertyNames(cat))
console.log("Reflect.ownKeys:", Reflect.ownKeys(cat))
hasOwnProperty
console.log(cat.hasOwnProperty('A'))
console.log(cat.hasOwnProperty('B'))
console.log(cat.hasOwnProperty('C'))
console.log(cat.hasOwnProperty('D'))
console.log(cat.hasOwnProperty('E'))
console.log(cat.hasOwnProperty(Symbol()))
console.log(cat.hasOwnProperty('A'))
console.log(cat.hasOwnProperty('toString'))
console.log(cat.hasOwnProperty('hasOwnProperty'))
打印结果:false、false、false、true、true、false、false、false、false,hasOwnProperty可以获取自身以及不可枚举属性,继承而来的属性返回false。