or 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']