for of、for in 、forEach使用方法对比

news/2025/1/9 10:55:27/

一. 概述

for of、for in 、forEach这三种方法在平常工作当中使用较多,但是有的时候可能能实现功能,但是可能并不是最佳实践,现在从遍历的对象类型、遍历顺序、遍历过程中是否可以修改对象、遍历过程中能否使用 break 和 continue、各自适用的场景这几个方面来对比介绍。

二. 遍历的对象类型

for-in:遍历的是对象的可枚举属性,包括自身属性和继承属性。
for-of:遍历的是具有迭代器的对象,例如数组、字符串、Set、Map 等。
forEach:遍历的是数组的每一个元素

三.遍历顺序

for-in:遍历的顺序是不确定的,因为对象属性的顺序并不是固定的。
for-of:遍历的顺序是有序的,因为具有迭代器的对象都有一个明确的遍历顺序。
forEach:遍历的顺序是从数组的第一个元素到最后一个元素。

四.遍历过程中是否可以修改对象

for-in:可以修改对象的属性。
for-of:不能修改遍历的对象。
forEach:不能修改遍历的数组,但是可以修改数组元素的值。

五.遍历过程中能否使用 break 和 continue

for-in:可以使用 break 和 continue
for-of:可以使用 break 和 continue
forEach:不能使用 break 和 continue

六.各自适用场景

for-in

适用场景:

遍历对象的属性,包括自身属性和继承属性。
遍历对象时,不关心属性的顺序。
需要动态获取对象的属性值。

示例代码:

const obj = {a: 1, b: 2, c: 3};
for (const key in obj) {console.log(key, obj[key]);
}


for-of

适用场景:

遍历具有迭代器的对象,例如数组、字符串、Set、Map 等。
需要保证遍历的顺序是有序的。
遍历数组或字符串时,需要直接获取元素值本身。

示例代码:

const arr = [1, 2, 3];
for (const item of arr) {console.log(item);
}


forEach

适用场景:

遍历数组的每一个元素,不需要获取索引或数组本身。
对数组元素进行操作,例如修改元素的值、删除元素等。

示例代码:

const arr = [1, 2, 3];
arr.forEach((item, index) => {console.log(item);
});

七.性能比较

for-in、for-of 和 forEach 都有各自的使用场景,具体的选择要根据实际需求和语境来决定。需要注意的是,在遍历对象时,for-in 的性能会比 for-of 和 forEach 差一些,因为它需要查找对象的属性,而查找属性是比直接遍历数组元素要慢的。


http://www.ppmy.cn/news/51531.html

相关文章

1.2 Java程序的基本结构

了解Java程序的文件结构 在Java中,一个程序经常由多个类组成,每个类通常被保存在一个独立的文件中。那么,Java程序文件应该如何组织呢?一般来说,Java程序的文件结构如下: 1. 源代码文件:Java程…

Harmony OS WiFi编程——连接热点、创建热点

本节主要介绍如何在HiSpark WiFi IoT套件上使用Hamony OS的WiFi相关编程接口。 相关知识点 WiFi的工作模式 AP模式:热点模式,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式。…

Docker系列---Docker Compose | 容器编排 | 理论详解

目录 1.Docker Compose 概述(YML) 2.Docker Compose 安装 3.Docker Compose 配置常用字段 4.Docker Compose 常用命令 5.基于 Compose 创建 镜像 1.首先安装好Compose 2.使用Dockerfile环境: 3.docker-compose撰写tomcat镜像 1.Docke…

爱快 Docker NodeRed Tcp服务器远程连接试验

有一台基于4415软路由安装的ubuntu server系统,在Ubuntu上通过Docker安装了NodeRed。ubuntu通过爱快硬路由与外网连接。爱快硬路由通过动态域名和端口映射实现远程访问ubuntu。 平时通过如下命令运行NodeRed镜像: docker run -it --rm -e TZ"Asia/…

Bitbake - 工具bitbake-layers介绍

在OpenEmbedded的发布套件中,使用bitbake-layers命令可以显示出现有的layers和priority: $ bitbake-layers show-layers layer path priority meta /local/openstlinux-18-01-2…

云原生|kubernetes|rancher-2.6.4安装部署简明手册

前言: rancher是一个比较特殊的开源的kubernetes管理工具,特殊在它是一个名称为k3s的简单kubernetes集群,而该集群是在kubernetes集群内的。 OK,本文将讲述如何在centos7服务器上,在已有的kubernetes-1.23.15集群内,…

原码、反码、补码

运算基本规则: 二进制的最高位是符号位:0表示正数,1表示负数正数的原码,反码,补码都一样(三码合一)负数的反码它的原码符号位不变,其它位取反负数的补码它的反码1,负数的…

git版本本地远程分支管理测试

只为搞清楚一些基本的git的本地提交、分支,远程分支的概念。 创建git库。 在本地首次建立一个001文件,首次提交到本地master,不提交(push)到远程master(gitee)。 add 增加001文件到库。 Git-co…