for in, Object.keys(), Object.getOwnPropertyNames()的区别

1,143 阅读1分钟

for in, Object.keys(), Object.getOwnPropertyNames()的区别

这三种是遍历对象属性的常用方法,相信大家在平常写代码都经常使用,这里具体说一下三种的区别


var person = {
  name: 'lifuya',
  age: 22,
}

var user = Object.create(person, {
  height: {
    value: 173,
    writable: true,
    enumerable: true, //可枚举
    configurable: false,
  },
  weight: {
    value: 73,
    writable: true,
    enumerable: false, //不可枚举
    configurable: false,
  },
})

先实例化一个对象user,赋给他除了继承于Person的属性外的height和weight属性,分别用三种不同的方法查看输出结果

for(let i in user){
  console.log(i)   //height name  age
}

for in 会遍历出所有的可枚举属性,包括原型属性

console.log(Object.keys(user))

// height

Object.keys()会遍历出自身的可枚举属性

Object.getOwnPropertyNames(user)

// height weight 

Object.getOwnPropertyNames()会遍历出自身的所有属性