for...in
循環(huán)是遍歷對象的每一個可枚舉屬性,包括原型鏈上面的可枚舉屬性劳淆。
Object.keys()
只是遍歷自身的可枚舉屬性,不包括遍歷原型鏈上的可枚舉屬性. 這是for...in
和Object.keys()
的主要區(qū)別。
Object.getOwnPropertyNames()
則是遍歷自身所有屬性(不論是否是可枚舉的),不包括原型鏈上面的神郊。
function People(){
this.name = 'Tom';
this.age = 24;
this.c = function(){
console.log('1');
}
}
People.prototype.look = function(){
console.log('look at this');
}
var b = new People();
//使用Object.defineProperty方法為b添加一個'sex'的不可枚舉屬性
Object.defineProperty(b,'sex',{
value:'女',
enumerable:false
});
for(var i in b){
console.log(i); //結(jié)果["name","age","c","look"]
}
console.log(Object.keys(b));//結(jié)果["name","age","c"]
console.log(Object.getOwnPropertyNames(b));//結(jié)果["name", "age", "c", "sex"]