当前位置: 首页 > news >正文

前端循环全解析:JS/ES/TS 循环写法与实战示例

循环是编程中控制流程的核心工具。本文将详细介绍 JavaScript、ES6+ 及 TypeScript 中各种循环的写法、特性,并通过实际示例帮助你掌握它们的正确使用姿势。


目录

  1. 传统三剑客

    • for 循环

    • while 循环

    • do...while 循环

  2. ES6 新特性

    • forEach

    • for...of

    • for...in

  3. 数组高阶方法

    • map

    • filter

  4. TypeScript 特别注意事项

  5. 循环对比与选择指南


一、传统三剑客

1. for 循环

特性

  • 最基础的循环结构

  • 明确控制循环次数

  • 支持 break 和 continue

// JavaScript
for (let i = 0; i < 5; i++) {console.log(i); // 0-4
}// TypeScript
const items: number[] = [10, 20, 30];
for (let i: number = 0; i < items.length; i++) {console.log(items[i]);
}

2. while 循环

特性

  • 条件前置检查

  • 适合不确定循环次数的情况

let count = 0;
while (count < 3) {console.log(count++); // 0,1,2
}

3. do...while 循环

特性

  • 至少执行一次

  • 条件后置检查

let x = 5;
do {console.log(x--); // 输出5后停止
} while (x > 5);

二、ES6 新特性循环

1. forEach

特性

  • 数组专用方法

  • 无法使用 break/continue

  • 回调函数参数丰富

const colors = ['red', 'green', 'blue'];// JavaScript
colors.forEach((color, index) => {console.log(`${index}: ${color}`);
});// TypeScript
interface ColorItem {id: number;name: string;
}const colorObjects: ColorItem[] = [{ id: 1, name: 'red' },{ id: 2, name: 'green' }
];colorObjects.forEach((item: ColorItem) => {console.log(item.id.toString());
});

2. for...of

特性

  • 支持所有可迭代对象

  • 可直接获取元素值

  • 支持 break/continue

// 遍历数组
const nums = [10, 20, 30];
for (const num of nums) {if (num > 20) break;console.log(num); // 10,20
}// 遍历字符串
for (const char of 'Hello') {console.log(char); // H,e,l,l,o
}// TypeScript 泛型示例
const mixedArray: Array<string | number> = ['a', 1, 'b'];
for (const item of mixedArray) {if (typeof item === 'string') {console.log(item.toUpperCase());}
}

3. for...in

特性

  • 遍历对象可枚举属性

  • 会遍历原型链属性

  • 数组索引为字符串类型

const obj = { a: 1, b: 2 };// JavaScript
for (const key in obj) {if (obj.hasOwnProperty(key)) {console.log(`${key}: ${obj[key]}`);}
}// TypeScript 类型断言
interface MyObject {[key: string]: number;
}const typedObj: MyObject = { x: 10, y: 20 };
for (const key in typedObj) {const value = typedObj[key];console.log(value.toFixed(2));
}

三、数组高阶方法

1. map

特性

  • 返回新数组

  • 数据转换专用

// TypeScript
const numbers: number[] = [1, 2, 3];
const squares: number[] = numbers.map(n => n * n);

2. filter

特性

  • 返回过滤后的新数组

  • 条件筛选利器

const users = [{ name: 'Alice', age: 25 },{ name: 'Bob', age: 17 }
];const adults = users.filter(user => user.age >= 18);

四、TypeScript 特别注意事项

  1. 类型注解

    // 明确声明索引类型
    const arr: number[] = [1, 2, 3];
    for (let i: number = 0; i < arr.length; i++) {const item: number = arr[i];
    }

  2. 枚举遍历

    enum Color { Red = 'RED', Green = 'GREEN' }
    for (const colorKey in Color) {const colorValue = Color[colorKey as keyof typeof Color];
    }

  3. 对象遍历

    interface User {id: number;name: string;
    }const user: User = { id: 1, name: 'Alice' };
    for (const key in user) {const value = user[key as keyof User];
    }


五、循环选择指南

循环类型最佳使用场景是否可中断返回值
for确定次数的循环
for...of遍历数组/可迭代对象
for...in遍历对象属性
forEach简单数组遍历undefined
map数组元素转换新数组
filter数组元素过滤新数组

总结建议

  1. 优先考虑可读性:在性能差异不大时,选择更语义化的方式

  2. 注意类型安全:TypeScript 中要确保循环变量正确类型

  3. 避免副作用:尽量使用纯函数式方法处理数据

  4. 性能关键场景:大数据量时优先考虑传统 for 循环

掌握各种循环的特点,根据具体场景选择合适的迭代方式,将显著提升代码质量和开发效率。

如果对你有帮助,请帮忙点个👍

相关文章:

前端循环全解析:JS/ES/TS 循环写法与实战示例

循环是编程中控制流程的核心工具。本文将详细介绍 JavaScript、ES6 及 TypeScript 中各种循环的写法、特性&#xff0c;并通过实际示例帮助你掌握它们的正确使用姿势。 目录 传统三剑客 for 循环 while 循环 do...while 循环 ES6 新特性 forEach for...of for...in 数组…...

大气体育直播模板赛事扁平自适应模板源码

源码名称&#xff1a;大气体育直播模板赛事网站源码 开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql 模板特点&#xff1a; 程序伪静态版本&#xff0c;实时采集更新&#xff0c;无人值守&#xff0c;省心省力。带火车头采集&#xff0c;可以挂着自动采集发布…...

vue3学习1

vite是新的官方构建工具&#xff0c;构建速度比webpack更快 vue项目的入口文件是index.html&#xff0c;一般在这里引入src/main.js&#xff0c;并且设置好容器#app App.vue放的是根组件&#xff0c;components里放分支组件 vue组件中写三种标签&#xff0c;template & s…...

java机器学习计算指标动态阈值

java机器学习计算指标动态阈值 最近听到有的人说要做机器学习就一定要学Python&#xff0c;我想他们掌握的知道还不够系统全面。本文作者以动态阈值需求场景给大家介绍几种常用Java实现的机器学习库&#xff0c;包括使用开源库如Weka或Deeplearning4j&#xff08;DL4J&#xf…...

mac os设置jdk版本

打开环境变量配置文件 sudo vim ~/.bash_profile 设置不同的jdk版本路径 # 设置JAVA_HOME为jdk17路径 export JAVA_HOME$(/usr/libexec/java_home -v 17)# 设置JAVA_HOME为jdk8路径 export JAVA_HOME$(/usr/libexec/java_home -v 1.8) 设置环境变量 # 将jdk加入到环境变量…...

Python正则表达式学习

Python正则表达式全攻略 一、正则表达式基础 1. 什么是正则表达式&#xff1f; 用于描述字符串匹配规则的表达式广泛应用于文本处理、表单验证、数据清洗等领域 2. Python中的re模块 import re3. 基础语法 字符说明示例.匹配任意字符(除换行)a.c → abc\d数字 [0-9]\d\d …...

ShenNiusModularity项目源码学习(10:ShenNius.FileManagement项目分析)

ShenNiusModularity项目支持七牛云和本地图片存储&#xff0c;其文件上传接口及实现就位于ShenNius.FileManagement项目内&#xff0c;该项目内文件不多&#xff0c;主要就是围绕上传本地及七牛云的实现及相关类定义。   扩展类FileManagemenServiceExtensions的AddFileUploa…...

mysql查看binlog日志

mysql 配置、查看binlog日志&#xff1a; 示例为MySQL8.0 1、 检查binlog开启状态 SHOW VARIABLES LIKE ‘log_bin’; 如果未开启&#xff0c;修改配置my.ini 开启日志 安装目录配置my.ini(mysql8在data目录) log-binmysql-bin&#xff08;开启日志并指定日志前缀&#xff…...

Node.js高频面试题精选及参考答案

目录 什么是 Node.js?它的主要特点有哪些? Node.js 的事件驱动和非阻塞 I/O 模型是如何工作的? 为什么 Node.js 适合处理高并发场景? Node.js 与传统后端语言(如 Java、Python)相比,有哪些优势和劣势? 简述 Node.js 的运行原理,包括 V8 引擎的作用。 什么是 Nod…...

TaskBuilder创建客户信息列表页面

3.4.1选择页面类型 点击上面创建的customer文件夹右侧的加号&#xff0c;打开“前端资源创建向导”对话框&#xff0c;选中“数据查询TFP”&#xff0c;资源名称会自动设置为index&#xff0c;这里我们不用改。 点“下一步”按钮&#xff0c;会弹出下图所示的“创建数据查询T…...

Linux Iptables示例一则

个人博客地址&#xff1a;Linux Iptables示例一则 | 一张假钞的真实世界 关于Iptables的介绍个人强烈推荐&#xff1a;iptables-朱双印博客-第2页。这位兄弟介绍的很详细。 我个人的需求是在同一个网络内从网络上把测试主机与正式环境主机间的网络进行隔离。我的思路是采用OU…...

新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)

视频教程和更多福利在我主页简介或专栏里 &#xff08;不懂都可以来问我 专栏找我哦&#xff09; 如果对你有帮助你可以来专栏找我&#xff0c;我可以无偿分享给你对你更有帮助的一些经验和资料哦 目录&#xff1a; 一、XSS的三种类型&#xff1a; 二、XSS攻击的危害&#x…...

【CXX】4 跨平台构建系统特性对比

多语言构建系统选项为开发团队提供了灵活性和选择&#xff0c;以适应不同的项目需求和现有的技术栈。CXX作为一个设计灵活的工具&#xff0c;旨在与多种构建系统无缝集成。以下是对不同构建系统选项的简要概述和建议&#xff1a; 一、Cargo&#xff1a; 适用场景&#xff1a;…...

MySQL 如何使用EXPLAIN工具优化SQL

EXPLAIN 是 SQL 查询优化中的一个重要工具&#xff0c;主要用于分析和诊断查询执行计划。通过 EXPLAIN&#xff0c;我们可以了解数据库引擎&#xff08;如 MySQL、PostgreSQL 等&#xff09;是如何执行特定的查询语句的&#xff0c;包括是否使用了索引、表连接的方式、扫描的行…...

沃丰科技大模型标杆案例|周大福集团统一大模型智能服务中心建设实践

沃丰科技携手老客户周大福如何进行统一大模型智能服务中心建设‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ “我们相信&#xff0c;科技与创新是推动珠宝行业持续发展的关键力量。”——周大福珠宝集团董事总经理黄绍基。这句话再次强调了科技与创新在珠宝行业发展中的重要性&…...

代码随想录day16

513.找树左下角的值 //迭代法中左视图的最后一位 int findBottomLeftValue(TreeNode* root) {int result 0;queue<TreeNode*> qe;if(root nullptr) return result;qe.push(root);vector<int> lefts;while(!qe.empty()){int sz qe.size();vector<int> tmp…...

常见的软件测试模型及特点

软件测试模型有多种&#xff0c;常见的包括以下几种&#xff0c;每种模型都有其特点和适用场景&#xff1a; 1. V 模型&#xff08;V-Model&#xff09; 特点&#xff1a; 测试和开发并行进行&#xff0c;开发的每个阶段都有对应的测试活动。适用于需求明确、开发过程较规范的…...

tailwindcss学习01

系列教程 01 入门 02 vue中接入 入门 # 注意使用cmd不要powershell npm init -y # 如果没有npx则安装 npm install -g npx npm install -D tailwindcss3.4.17 --registry http://registry.npm.taobao.org npx tailwindcss init修改tailwind.config.js /** type {import(tai…...

C语言复杂度分析

文章目录 一 算法效率评估第一,设计可靠的解法:第二,优化解的效率:二 迭代与递归迭代for 循环递归递归和迭代区别一 算法效率评估 第一,设计可靠的解法: 算法需要能够在规定的输入范围内,准确无误地求解问题,确保其结果的正确性和稳定性。这是算法设计的基本要求。 …...

DeepSeek服务器繁忙 多种方式继续优雅的使用它

前言 你的DeepSeek最近是不是总是提示”服务器繁忙,请稍后再试。”&#xff0c;尝试过了多次重新生成后&#xff0c;还是如此。之前DeepSeek官网连续发布2条公告称&#xff0c;DeepSeek线上服务受到大规模恶意攻击。该平台的对话框疑似遭遇了“分布式拒绝服务攻击”&#xff0…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...