JS中对象的几种遍历方法

1. for in 遍历

for in用来遍历对象自身和其可枚举属性(不含symbol属性),且可遍历对象原型上的属性。

let obj = {
  name: 'hong',
  age: 20,
  sex: 'nan'
}

Object.prototype.scholl = 'wyu'
Object.prototype.say = function () {
  console.log('hello!')
}

for (let i in obj) {
  console.log(i + ':' + obj[i])
}

// 打印以下信息
// name:hong
// age:20
// sex:nan
// scholl:wyu
// say:function () {
//   console.log('hello!')
// }

 若只遍历对象上的实例属性,不遍历对象原型上的属性,可用 hasOwnProperty 来判断一下是否为该对象实例的属性,再进行遍历。

for (let i in obj) {
  if (obj.hasOwnProperty(i)) {
    console.log(i + ':' + obj[i])
  }
}
// 输出
name:hong
age:20
sex:nan

2. 使用 Object.keys 和 Object.values 遍历 

let obj = {
  name: 'hong',
  age: 20,
  sex: 'nan'
}

console.log(Object.keys(obj)) //[ 'name', 'age', 'sex' ]
console.log(Object.values(obj)) //[ 'hong', 20, 'nan' ]

3. Object.getOwnPropertyNames(obj) 方法

返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)

let obj = {
  name: 'hong',
  age: 20,
  sex: 'nan'
}

let objKeys = Object.getOwnPropertyNames(obj)
console.log(objKeys) //[ 'name', 'age', 'sex' ]
objKeys.forEach(key => {
  console.log(obj[key])
})
//hong
//20
//nan

4. Reflect.ownKeys(obj)遍历

返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举. 

let obj = {
  name: 'hong',
  age: 20,
  sex: 'nan'
}

console.log(Reflect.ownKeys(obj))

 

posted @ 2022-05-08 22:02  RHCHIK  阅读(8803)  评论(0编辑  收藏  举报