获取对象上的属性
var obj = {
name:"sonya",
age:24,
sex:"male"
};
//1. for...in 可枚举的原型链+对象,但原型链上的属性默认不可枚举
for(var key in obj){
console.log(key + ":" + obj[key]);
}
//2.Object.keys():对象自身可枚举的属性名 组成的数组
var keys = Object.keys(obj); //["name", "age", "sex"]
keys.forEach(function(item){
console.log(item + ":" + obj[item]);
});
//3.in 操作符:原型链和对象的属性,都包括
//4.Object.hasOwnProperty("xxx"); 不包括原型链上的方法
//5.对象中所有属性,无论是否可枚举
Object.getOwnPropertyNames(obj); //["name", "age", "sex"]
//对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。
6.Reflect.ownKeys(obj);
总结
对象+原型:
in(不可枚举可包括)
for…in(仅可枚举)
仅对象自身:
Object.keys(obj)【自身可枚举】
Object.getOwnPropertyNames(obj) 【自身所有 不包括Symbol】
Reflect.ownKeys(obj) 【对象自身的所有】
可枚举
for…in(仅可枚举)
Object.keys(obj)【自身可枚举】
不可枚举
in
Reflect.ownKeys(obj) 【对象自身的所有】
Object.getOwnPropertyNames(obj) 【自身所有 不包括Symbol】