获取对象上的属性

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】

Table of Contents