获取对象属性的三种方式【for in | Object.getOwnPropertyNames | Object.keys】

朋友们好 啊~
先简单介绍一下两个方法
1、Object.create(param1)
以param1为原型创建一个空对象,即创建出来的对象的原型为param1
详情参考 Object.create
2、Object.defineProperty(obj, key, handler)
通过handler对象操作obj对象上的key属性
详情参考 Object.defineProperty

创建一个对象

let obj = Object.create({a:1})
obj.b = 2
Object.defineProperty(obj,"c",{
    value:3   
})

在这里插入图片描述
创建的obj上有三个属性如上,根据添加属性的方式,三个属性有如下特点

  • a:为原型链上的属性,非自身属性,可枚举
  • b:自身属性,可枚举
  • c:为自身属性,不可枚举

获取对象身上的属性

console.log("--------------------1--------------------");
for(let i in obj){              //获取自身与原型上的可枚举属性
    console.log(i)   //a,b
}

console.log("--------------------2---------------------");
let xxx = Object.getOwnPropertyNames(obj)  //获取自身所有属性
console.log(xxx);    //[b,c]

console.log("--------------------3---------------------");
let yyy = Object.keys(obj)                 //获取自身可枚举属性
console.log(yyy);    //[b]

console.log("--------------------4--------------------");
for(let i in obj){
    obj.hasOwnProperty(i) && console.log(i)     //是否是 自身可枚举属性
                                           //b
}

通过以上四种方法(第四种为判断)得到的结果如下
在这里插入图片描述
由此可以简单总结为:

  • for in:获取自身与原型链上的可枚举属性
  • Object.getOwnPropertyNames: 获取自身所有属性
  • Object.keys:获取自身可枚举属性
  • hasOwnProperty:判断是否是自身可枚举属性

谢谢朋友们~


版权声明:本文为weixin_44607531原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。