我们先定义一个对象,这个对象有原型上的属性,有不可枚举属性,有可枚举属性
let obj={
name:"andy",
age:18
};
obj.__proto__.job="hehe";
Object.defineProperty(obj,"sex",{
enumerable:false
});
for in
可以循环出所有的可枚举属性,不管是不是原型上的
for(let name in obj){
console.log(name);//name age job
}
Object.keys
只能循环出自身的可枚举属性
let name=Object.keys(obj);
console.log(name);//["name", "age"]
getOwnPropertyNames
返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组
let arr=Object.getOwnPropertyNames(obj);
console.log(Object.getOwnPropertyNames(obj));//["name", "age", "sex"]