JavaScript中如何遍历对象(方法汇总)

 更新时间:2025年07月08日 08:57:37   作者:前端风云志  
文章介绍了JavaScript中遍历对象的多种方法,包括for...in(含继承属性)、Object.keys/values/entries(不含继承属性,支持Symbol)及Reflect.ownKeys,并强调TypeScript需添加索引签名以避免报错,感兴趣的朋友跟随小编一起看看吧

今天来点稍微轻松的话题,如何在JavaScript中遍历对象,在平常的工作中,遍历对象是很常见的操作,javascript提供了多种方法来遍历对象的属性。这些方法各有特点,不同的场景需要使用不同的方法。

假设我们有一个Person对象,包含名字和年龄两个属性,下面看看有哪些方式可以遍历这个对象。

const person = {
  name: 'Philip',
  age: 18,
};

for...in

遍历对象最基本的方式就是使用for...in,这里需要注意区分和for...of的区别。

  • for...in - 遍历可枚举对象,比如Object
  • for...of - 遍历可迭代对象,比如Array

在以下代码中,key是每个属性的名字 - 对应nameage,而person[key]则是每个属性的值 - 对应Philip18

for (const key in person) {
  console.log(key, person[key]);
}

输出如下:

name Philip
age 18

for...in是遍历对象最基本的方式,需要注意的是它不仅会遍历对象自身的属性,也会遍历原型链上的属性。假设我们在Object.prototype上添加一个属性,那么这个属性也会被遍历到。

Object.prototype.customProperty = 'Hello World';
for (const key in person) {
  console.log(key, person[key]);
}

输出如下:

name Philip
age 18
customProperty Hello World

如果你只想遍历对象自身的属性,可以使用Object.hasOwnProperty方法来过滤掉原型链上的属性。

for (const key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key, person[key]);
  }
}

使用for...of + Object.keys

Object.keys方法返回一个对象中所有可枚举属性的键名并放到一个数组里,配合for...of可以很方便地遍历对象的属性。

for (const key of Object.keys(person)) {
  console.log(key, person[key]);
}

使用for...of + Object.values

如果你只关心对象的值,而不在key的话,那么可以使用Object.values方法,它返回一个包含对象所有可枚举属性值的数组。

for (const value of Object.values(person)) {
  console.log(value);
}

输出如下:

Philip
18

for...of + Object.entries

下面的方法使用for...of进行遍历,我们都知道for..of是用来遍历可迭代对象的,所以Object.entries返回的一定是一个可迭代对象 - 这里是一个二维数组,然后[key, value]是一个解构操作,负责解构内层一维数组中的值并输出。

for (const [key, value] of Object.entries(person)) {
  console.log(key, value);
}

Object.entries(person)输出如下,可以看作是一个键值对组成的二维数组。

[[name, 'Philip'], [age, 18]]

使用[key, value]进行解构后正好得到两组数据:

key = name, value = 'Philip' // 第一组数据
key = age, value = 18 // 第二组数据

Object.entries + forEach

一个更加函数式的写法是使用数组对象上的forEach方法。

Object.entries(person).forEach(([key, value]) => {
  console.log(key, value);
});

forEach本质上和for...of并无区别,在使用链式操作时,这种方式可读性更好,比如和filter等方法串联调用时。

Object.entries(person)
  .filter(([key, value]) => key !== 'age') // 过滤掉 age 属性
  .forEach(([key, value]) => console.log(key));

还有一点要注意,那就是forEach是无法中断的,比如不能使用continue或者break来中断循环,但是for...infor...of则不受此限制。

Reflect.ownKeys

如果你的对象中有Symbol类型的属性,那么可以使用Reflect.ownKeys方法来获取所有属性的键名。

const person = {
  name: 'Philip',
  age: 18,
  [Symbol('id')]: 123,
};
Reflect.ownKeys(person).forEach(key => {
  console.log(key, person[key]);
});

输出如下:

name Philip
age 18
Symbol(id) 123

Reflect.ownKeys是遍历Symbol类型属性的唯一方法。

最后,如果你使用的是TypeScript,那么所有使用了索引操作的遍历方式(比如person[key])都需要添加索引签名,否则TypeScript会报错,具体原因可以看这篇:

好了最后用表格总结一下:

方法包含继承属性包含Symbol包含不可枚举属性TypeScript支持
for...in需要索引签名
Object.keys()
Object.values()
Object.entries()
Reflect.ownKeys()

到此这篇关于JavaScript中如何遍历对象的文章就介绍到这了,更多相关JavaScript遍历对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用不到200行代码写一款属于你自己的js类库

    利用不到200行代码写一款属于你自己的js类库

    这篇文章主要给大家介绍了如何利用不到200行代码写一款属于你自己的js类库,文中通过示例代码介绍的非常详细,对大家学习或者使用js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • JavaScript 程序编码规范

    JavaScript 程序编码规范

    这是一套适用于JavaScript程序的编码规范。它基于Sun的Java程序编码规范。但进行了大幅度的修改, 因为JavaScript不是Java。
    2010-11-11
  • JavaScript四种调用模式和this示例介绍

    JavaScript四种调用模式和this示例介绍

    JavaScript调用时除了声明时定义的形参外,每个函数接受两个附加参数:this 和arguments,下面为大家介绍下JavaScript四种调用模式和this
    2014-01-01
  • js验证身份证号码记录的方法

    js验证身份证号码记录的方法

    在一些需要填写身份证的表单网页中,需要对身份证的输入做一个验证,于是,我记录下了自己写的验证。这篇文章主要介绍了js验证身份证号码记录的方法,需要的朋友可以参考下
    2019-04-04
  • JavaScript 监听textarea中按键事件

    JavaScript 监听textarea中按键事件

    不同的浏览器中的事件监听机制是不同的,以onKeyPress事件为例。
    2009-10-10
  • 关于Blog顶部的滚动导航条代码

    关于Blog顶部的滚动导航条代码

    关于Blog顶部的滚动导航条代码...
    2006-09-09
  • 原生JS中slice()方法和splice()区别

    原生JS中slice()方法和splice()区别

    slice()方法和splice()方法都是原生js中对数组操作的方法。那么他两种有什么区别呢?今天通过本文教程给大家简单介绍下,需要的朋友可以参考下
    2017-03-03
  • js点击图片实现查看大图简单方法

    js点击图片实现查看大图简单方法

    今天开发的时候,遇到要点击缩略图之后显示图片的大图查看,所以本文给大家分享下,这篇文章主要给大家介绍了关于js点击图片实现查看大图的简单方法,需要的朋友可以参考下
    2023-06-06
  • jQuery右下角旋转环状菜单特效代码

    jQuery右下角旋转环状菜单特效代码

    jquery实现右下角旋转环形菜单特效代码,是固定在页面右下角位置,当用户点击了主菜单按钮后,子菜单项会以环状旋转进入页面,并使用animate.css制作动画效果,有需要的朋友可以参考下
    2015-08-08
  • JavaScript HTML DOM元素 节点操作汇总

    JavaScript HTML DOM元素 节点操作汇总

    这篇文章主要介绍了JavaScript HTML DOM元素 节点操作汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论