獲取物件屬性的三種方式【for in | Object.getOwnPropertyNames | Object.keys】
阿新 • • 發佈:2021-02-02
朋友們好 啊~
先簡單介紹一下兩個方法
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:判斷是否是自身可列舉屬性
謝謝朋友們~