for in 、Object.keys()以及Object.getOwnPropertyNames的区别
var obj= Object.create(parent, {
b: {
value: 2,
writable: true,
enumerable: true,
configurable: true
},
c: {
value: 3,
writable: true,
enumerable: false,
configurable: true
}
});
obj.__proto__ = {age:123};
1、 for in 遍历对象,会将对象自身的属性以及原型上继承的属性都打印出来,但是不会获取不可枚举的属性。
for(let key in obj){
console.log(key) // =>b ,age
}
2、Object.keys()遍历对象,获取对象自身可枚举属性。
var arr = Object.keys(obj);
console.log(arr) => ['b']
3、Object.getOwnPropertyNames()遍历对象,获取所有自身属性,包括不可枚举的属性。
var arr = Object.getOwnPropertyNames(obj);
console.log(arr) => ['b','c']