可枚举和不可枚举属性(for...in循环和Objec.keys()和Object.getOwnPropertyNames())

  1. for...in循环是遍历对象的每一个可枚举属性,包括原型链上面的可枚举属性。

  2. Object.keys()只是遍历自身的可枚举属性,不包括遍历原型链上的可枚举属性. 这是for...inObject.keys()的主要区别。

  3. 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);  //结果["name","age","c","look"]
}

console.log(Object.keys(b));//结果["name","age","c"]

console.log(Object.getOwnPropertyNames(b));//结果["name", "age", "c", "sex"]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。