详尽分享遍历对象的几种方法

简介: 详尽分享遍历对象的几种方法

一、for in

  for in循环是最基础的遍历对象的方式,它还会得到对象原型链上的属性

const person=Object.create({

// sex和height是原型链上的属性

sex:'male',

height:168

});

//name和age是属于对象的属性

person.name='sunny';

person.age=28;

//sex和height出现在了原型链上而不是对象属性中

console.log(person);

//for in会将对象的属性和原型上的属性一块遍历出来,顺序是先对象属性然后是原型链上的属性

for(let key in person){

console.log(person【key】);//sunny 28 male 168

}

//如果需要过滤掉原型链上的属性,可以使用asOwnProperty()方法

for(let key in person){

if (person.hasOwnProperty(key)) {

console.log(person【key】) //sunny 28

}//代码效果参考:http://www.ezhiqi.com/bx/art_6523.html

}

二、Object.keys

  Object.keys()是ES5新增的一个对象方法,该方法返回对象自身属性名组成的数组,他会自动过滤掉原型链上的属性,然后可以通过数组的forEach()方法来遍历。

    const person=Object.create({

    // sex和height是原型链上的属性

  sex:'male',

    height:168

    });

//name和age是属于对象的属性

person.name='sunny';

person.age=28;

//这种方法不会遍历原型链上的属性

Object.keys(person).forEach((key) => {

console.log(person【key】) // sunny 28

})

三、Object.getOwnPropertyNames()

  也是ES5新增的一个对象方法,该方法返回对象自身属性名组成的数组,包括不可枚举的属性,也可以通过数组的forEach()方法来遍历。

// 创建一个对象并指定其原型,bar 为原型上的属性

// baz 为对象自身的属性并且不可枚举

const obj = Object.create({

bar: 'bar'

}, {

baz: {

value: 'baz',

enumerable: false

}

}//代码效果参考:http://www.ezhiqi.com/bx/art_2557.html)

obj.foo = 'foo'

// 不包括不可枚举的 baz 属性

Object.keys(obj).forEach((key) => {

console.log(obj【key】) // foo

})

// 包括不可枚举的 baz 属性

Object.getOwnPropertyNames(obj).forEach((key) => {

console.log(obj【key】) // baz, foo

})

除此之外还有:Object.getOwnPropertySymbols()、Reflect.ownKeys等,详细讲解见如有侵权请联系删除)

相关文章
|
4天前
|
存储 算法 搜索推荐
|
2月前
|
C#
C#学习相关系列之自定义遍历器
C#学习相关系列之自定义遍历器
|
2月前
|
算法 Java 程序员
Java数组全套深入探究——基础知识阶段4、数组的遍历
Java数组全套深入探究——基础知识阶段4、数组的遍历
51 0
|
2月前
|
存储 Java 程序员
Java数组全套深入探究——基础知识阶段3、数组下标操作
Java数组全套深入探究——基础知识阶段3、数组下标操作
36 0
|
2月前
|
存储 Java 程序员
Java数组全套深入探究——基础知识阶段2、数组的定义语法
Java数组全套深入探究——基础知识阶段2、数组的定义语法
40 0
|
2月前
|
存储 C++
关于数组的基本要点
关于数组的基本要点
39 0
|
前端开发
前端学习案例2-对象的遍历2
前端学习案例2-对象的遍历2
68 0
前端学习案例2-对象的遍历2
|
前端开发
前端学习案例1-对象的遍历1
前端学习案例1-对象的遍历1
55 0
前端学习案例1-对象的遍历1
六个方法两个拷贝带你透彻对象合并问题
实际场景下,我们经常需要进行对象合并的操作,而有时候原对象的改变会改变合并后的对象,这是一个非常严重的问题,涉及到了合并对象中的深浅拷贝,递归遍历,让人发蒙。
124 1
|
存储 Java Serverless
java数组基础的基本概念,声明与遍历
java数组基础的基本概念,声明与遍历
134 0