0

0

JavaScript循环有哪些类型_它们分别适用于什么场景

紅蓮之龍

紅蓮之龍

发布时间:2026-01-06 20:28:46

|

780人浏览过

|

来源于php中文网

原创

javascript有5种主流循环机制:for、while、do...while、for...in、for...of;其余如foreach、map属数组方法,非语言级循环语句。

javascript循环有哪些类型_它们分别适用于什么场景

JavaScript 有 5 种主流循环机制,不是“3 种”也不是“7 种”——真正日常开发中需明确区分、按场景选用的是这五类:forwhiledo...whilefor...infor...of。其余如 forEachmap 等属于数组方法,不是语言级循环语句;for await...of 属于异步迭代特例,暂不纳入基础循环范畴。

什么时候用 for 循环?索引控制、性能敏感、已知次数

当你需要精确控制下标、反复读写数组某一项、或循环次数固定时,for 是首选。它结构紧凑、无隐式开销,V8 引擎对其优化最成熟。

  • ✅ 推荐写法:缓存 array.length,避免每次判断都查属性(尤其大数组)
    for (let i = 0, len = arr.length; i < len; i++) { console.log(arr[i]); }
  • ❌ 避免在循环体里修改 i 同时又依赖 i++,易逻辑错乱
  • ⚠️ 不要用于遍历对象——for...in 才是为此设计的

什么时候用 whiledo...while?条件驱动、次数未知、至少执行一次

while 是「先判后跑」,适合等待某个状态就绪(比如队列非空、接口返回成功);do...while 是「先跑后判」,典型用于用户输入校验、菜单交互等必须触发一次的场景。

  • while 示例:消费任务队列
    while (tasks.length > 0) { const task = tasks.shift(); run(task); }
  • do...while 示例:强制用户输入非空用户名
    let name; do { name = prompt('请输入用户名'); } while (!name?.trim());
  • ⚠️ 两者都极易写成死循环——务必确保循环体内有改变条件变量的操作(如 i++tasks.shift()name = ...

什么时候用 for...in?只遍历对象的可枚举属性名

for...in 的目标非常明确:遍历对象自身 + 原型链上所有可枚举(enumerable)的字符串键名。它不保证顺序,也不处理 Symbol 属性。

海绵音乐
海绵音乐

字节跳动推出的AI音乐生成工具

下载

立即学习Java免费学习笔记(深入)”;

  • ✅ 正确用途:快速检查对象有哪些字段、做简单属性拷贝(配合 hasOwnProperty 过滤原型)
    const obj = { a: 1, b: 2 }; for (const key in obj) { if (obj.hasOwnProperty(key)) { console.log(key, obj[key]); } }
  • ❌ 绝对不要用它遍历数组——会遍历到数组方法(如 pushmap)和自定义属性,且顺序不可靠
  • ⚠️ 若对象含 Symbol 属性,for...in 完全看不到,得用 Object.getOwnPropertySymbols() 单独处理

什么时候用 for...of?遍历值、支持迭代器、现代首选

for...of 遍历的是「可迭代对象(iterable)」的值,包括 ArrayStringSetMap(注意:Map 遍历的是 [key, value] 元组),但不支持普通对象(无 [Symbol.iterator])。

  • ✅ 优势明显:语法简洁、语义清晰、天然支持 break/continue、兼容异步迭代(for await...of
    const arr = [10, 20, 30]; for (const num of arr) { console.log(num); // 10, 20, 30 }
  • ❌ 对象不能直接用:for...of 作用于 {} 会报 TypeError: obj is not iterable
  • ⚠️ Map 遍历时需解构:for (const [key, value] of map),否则拿到的是整个元组

真正容易被忽略的点在于:循环选择不是看“哪个新”,而是看“谁最贴近你的数据结构和控制需求”。比如处理 API 返回的数组列表,for...offor 更安全(不用操心索引越界);但若你要逆序遍历并修改原数组,for (let i = arr.length - 1; i >= 0; i--) 仍是不可替代的。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

950

2023.08.02

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

104

2023.09.25

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

204

2025.12.04

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

558

2023.09.20

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

261

2025.10.24

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

261

2025.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

718

2023.08.03

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

19

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.8万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.3万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号