hasOwnProperty()方法返回值是一个布尔值,指示对象自身属性中是否具有指定的属性,因此这个方法会忽略掉那些从原型链上继承到的属性。
Object.prototype.foo = 'animal';
let obj = {
name: 'xiaoming',
age: '12'
}
console.log(obj.hasOwnProperty('foo')) // false
console.log(obj.hasOwnProperty('name')) // true
如果指定的属性在指定的对象或其原型链中,则in 运算符返回true。
console.log('foo' in obj) // true
因此,如果我们想要遍历对象的所有属性,使用for( in );而如果我们只想遍历对象的自身属性,则用hasOwnProperty()进行判断过滤。
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
console.log(key);
}
}
Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组,因此也可以这样遍历对象的自身属性:
for(let key of Object.keys(obj)) {
console.log(key);
}