前端循环全解析:JS/ES/TS 循环写法与实战示例
循环是编程中控制流程的核心工具。本文将详细介绍 JavaScript、ES6+ 及 TypeScript 中各种循环的写法、特性,并通过实际示例帮助你掌握它们的正确使用姿势。
目录
-
传统三剑客
-
for 循环
-
while 循环
-
do...while 循环
-
-
ES6 新特性
-
forEach
-
for...of
-
for...in
-
-
数组高阶方法
-
map
-
filter
-
-
TypeScript 特别注意事项
-
循环对比与选择指南
一、传统三剑客
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 特别注意事项
-
类型注解:
// 明确声明索引类型 const arr: number[] = [1, 2, 3]; for (let i: number = 0; i < arr.length; i++) {const item: number = arr[i]; } -
枚举遍历:
enum Color { Red = 'RED', Green = 'GREEN' } for (const colorKey in Color) {const colorValue = Color[colorKey as keyof typeof Color]; } -
对象遍历:
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 | 数组元素过滤 | ❌ | 新数组 |
总结建议
-
优先考虑可读性:在性能差异不大时,选择更语义化的方式
-
注意类型安全:TypeScript 中要确保循环变量正确类型
-
避免副作用:尽量使用纯函数式方法处理数据
-
性能关键场景:大数据量时优先考虑传统 for 循环
掌握各种循环的特点,根据具体场景选择合适的迭代方式,将显著提升代码质量和开发效率。
如果对你有帮助,请帮忙点个👍
相关文章:
前端循环全解析:JS/ES/TS 循环写法与实战示例
循环是编程中控制流程的核心工具。本文将详细介绍 JavaScript、ES6 及 TypeScript 中各种循环的写法、特性,并通过实际示例帮助你掌握它们的正确使用姿势。 目录 传统三剑客 for 循环 while 循环 do...while 循环 ES6 新特性 forEach for...of for...in 数组…...
大气体育直播模板赛事扁平自适应模板源码
源码名称:大气体育直播模板赛事网站源码 开发环境:帝国cms 7.5 安装环境:phpmysql 模板特点: 程序伪静态版本,实时采集更新,无人值守,省心省力。带火车头采集,可以挂着自动采集发布…...
vue3学习1
vite是新的官方构建工具,构建速度比webpack更快 vue项目的入口文件是index.html,一般在这里引入src/main.js,并且设置好容器#app App.vue放的是根组件,components里放分支组件 vue组件中写三种标签,template & s…...
java机器学习计算指标动态阈值
java机器学习计算指标动态阈值 最近听到有的人说要做机器学习就一定要学Python,我想他们掌握的知道还不够系统全面。本文作者以动态阈值需求场景给大家介绍几种常用Java实现的机器学习库,包括使用开源库如Weka或Deeplearning4j(DL4J…...
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. 什么是正则表达式? 用于描述字符串匹配规则的表达式广泛应用于文本处理、表单验证、数据清洗等领域 2. Python中的re模块 import re3. 基础语法 字符说明示例.匹配任意字符(除换行)a.c → abc\d数字 [0-9]\d\d …...
ShenNiusModularity项目源码学习(10:ShenNius.FileManagement项目分析)
ShenNiusModularity项目支持七牛云和本地图片存储,其文件上传接口及实现就位于ShenNius.FileManagement项目内,该项目内文件不多,主要就是围绕上传本地及七牛云的实现及相关类定义。 扩展类FileManagemenServiceExtensions的AddFileUploa…...
mysql查看binlog日志
mysql 配置、查看binlog日志: 示例为MySQL8.0 1、 检查binlog开启状态 SHOW VARIABLES LIKE ‘log_bin’; 如果未开启,修改配置my.ini 开启日志 安装目录配置my.ini(mysql8在data目录) log-binmysql-bin(开启日志并指定日志前缀ÿ…...
Node.js高频面试题精选及参考答案
目录 什么是 Node.js?它的主要特点有哪些? Node.js 的事件驱动和非阻塞 I/O 模型是如何工作的? 为什么 Node.js 适合处理高并发场景? Node.js 与传统后端语言(如 Java、Python)相比,有哪些优势和劣势? 简述 Node.js 的运行原理,包括 V8 引擎的作用。 什么是 Nod…...
TaskBuilder创建客户信息列表页面
3.4.1选择页面类型 点击上面创建的customer文件夹右侧的加号,打开“前端资源创建向导”对话框,选中“数据查询TFP”,资源名称会自动设置为index,这里我们不用改。 点“下一步”按钮,会弹出下图所示的“创建数据查询T…...
Linux Iptables示例一则
个人博客地址:Linux Iptables示例一则 | 一张假钞的真实世界 关于Iptables的介绍个人强烈推荐:iptables-朱双印博客-第2页。这位兄弟介绍的很详细。 我个人的需求是在同一个网络内从网络上把测试主机与正式环境主机间的网络进行隔离。我的思路是采用OU…...
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
视频教程和更多福利在我主页简介或专栏里 (不懂都可以来问我 专栏找我哦) 如果对你有帮助你可以来专栏找我,我可以无偿分享给你对你更有帮助的一些经验和资料哦 目录: 一、XSS的三种类型: 二、XSS攻击的危害&#x…...
【CXX】4 跨平台构建系统特性对比
多语言构建系统选项为开发团队提供了灵活性和选择,以适应不同的项目需求和现有的技术栈。CXX作为一个设计灵活的工具,旨在与多种构建系统无缝集成。以下是对不同构建系统选项的简要概述和建议: 一、Cargo: 适用场景:…...
MySQL 如何使用EXPLAIN工具优化SQL
EXPLAIN 是 SQL 查询优化中的一个重要工具,主要用于分析和诊断查询执行计划。通过 EXPLAIN,我们可以了解数据库引擎(如 MySQL、PostgreSQL 等)是如何执行特定的查询语句的,包括是否使用了索引、表连接的方式、扫描的行…...
沃丰科技大模型标杆案例|周大福集团统一大模型智能服务中心建设实践
沃丰科技携手老客户周大福如何进行统一大模型智能服务中心建设 “我们相信,科技与创新是推动珠宝行业持续发展的关键力量。”——周大福珠宝集团董事总经理黄绍基。这句话再次强调了科技与创新在珠宝行业发展中的重要性&…...
代码随想录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…...
常见的软件测试模型及特点
软件测试模型有多种,常见的包括以下几种,每种模型都有其特点和适用场景: 1. V 模型(V-Model) 特点: 测试和开发并行进行,开发的每个阶段都有对应的测试活动。适用于需求明确、开发过程较规范的…...
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最近是不是总是提示”服务器繁忙,请稍后再试。”,尝试过了多次重新生成后,还是如此。之前DeepSeek官网连续发布2条公告称,DeepSeek线上服务受到大规模恶意攻击。该平台的对话框疑似遭遇了“分布式拒绝服务攻击”࿰…...
树莓派CM4工业一体机:硬件解析与应用实践
1. 产品概述:基于树莓派CM4的工业级一体机Chipsee AIO-CM4-156是一款面向工业场景设计的全功能一体式计算机,其核心采用了树莓派Compute Module 4(CM4)作为运算单元。作为前代10.1英寸型号的升级版本,这款15.6英寸设备…...
鱼群计数检测数据集VOC+YOLO格式1806张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1806标注数量(xml文件个数):1806标注数量(txt文件个数):1806标注类别…...
JMeter 安装与配置教程 (Windows 系统)
文章目录JMeter 安装与配置教程 (Windows 系统)1、安装 JDK2、下载 Apache JMeter3、配置环境变量4、启动 JMeter5、运行 JMeter GUI 或命令行模式常见问题与解决方案JMeter 安装与配置教程 (Windows 系统) 概述: JMeter 是一款开源的性能测试工具,广泛…...
深度解析:构建高性能网盘直链解析架构的技术实现方案
深度解析:构建高性能网盘直链解析架构的技术实现方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...
Voxtral-4B-TTS-2603精彩案例:用fr_casual_female生成法语营销语音+下载分享
Voxtral-4B-TTS-2603精彩案例:用fr_casual_female生成法语营销语音下载分享 1. 语音合成新体验 Voxtral-4B-TTS-2603是Mistral最新发布的开源语音合成模型,它让高质量的多语言语音生成变得触手可及。想象一下,只需输入文字,就能…...
MCP 2026日志分析升级全解密:如何在72小时内完成旧日志管道迁移并启用AI驱动的实时语义标注?
更多请点击: https://intelliparadigm.com 第一章:MCP 2026日志分析升级全景概览 MCP(Mission-Critical Platform)2026版本日志分析子系统完成架构级重构,核心目标是实现毫秒级实时聚合、语义化异常归因与跨服务拓扑追…...
终极Unity游戏翻译指南:5分钟用XUnity.AutoTranslator打破语言障碍
终极Unity游戏翻译指南:5分钟用XUnity.AutoTranslator打破语言障碍 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂的日语RPG或欧美大作而苦恼吗?XUnity.AutoTranslat…...
GPU加速边缘计算与实时ISAC技术解析
1. GPU加速边缘计算与实时ISAC的技术融合在移动通信向6G演进的过程中,边缘计算与GPU加速技术的结合正在重塑无线网络的架构和能力边界。传统蜂窝网络面临着连接收入下降与运营成本上升的双重压力,这使得单纯依靠连接性能提升已经难以支撑代际升级的商业逻…...
如何用PyTorch Image Models轻松实现MoCo v2对比学习:完整实战指南
如何用PyTorch Image Models轻松实现MoCo v2对比学习:完整实战指南 【免费下载链接】pytorch-image-models The largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet,…...
突破物理引擎瓶颈:Genesis约束求解器的Decomp架构与实时解析技术
突破物理引擎瓶颈:Genesis约束求解器的Decomp架构与实时解析技术 【免费下载链接】Genesis A generative world for general-purpose robotics & embodied AI learning. 项目地址: https://gitcode.com/GitHub_Trending/genesi/Genesis Genesis是一个面向…...
