迭代对象常用方法

132 阅读1分钟

迭代对象的方法

  • for in 循环会得到对象原型链上的属性,不包含不可枚举属性
  • Object.keys() 只包含自身属性,不包含原型链
  • Object.getOwnPropertyNames() 返回自身属性和不可枚举属性

看下面代码


// 声明一个构造函数
function Person() {
  this.name = "huo"
  this.age = 18
  this.getName = function () {
    console.log(this.name)
  }
};

Person.prototype.hobby = "洗脚"//在原型上设置属性
obj = new Person()
// 在obj实例上设置age 为不可枚举属性
Object.defineProperty(obj, "age", {
  value: "male",
  //是否为枚举属性
  enumerable: false
});

//所有迭代对象的方法只有for in 可以迭代原型上的属性
for (let i in obj) {
  console.log(i)
}
console.log(Object.keys(obj))//Object.keys获得自身属性
console.log(Object.getOwnPropertyNames(obj))//获得自身,加上不可枚举属性