JavaScript常用循环有5种:for适合次数明确或需索引的场景;while适合条件驱动、次数不确定的情况;do...while确保至少执行一次;for...in遍历对象可枚举属性(含原型链),需hasOwnProperty过滤;for...of遍历可迭代对象(如数组、Map),不适用于普通对象。

JavaScript 里常用的循环主要有 5 种:for、while、do...while、for...in、for...of。选 for 还是 while,关键看“循环次数是否明确”。
for 循环适合已知次数或需要索引的场景
比如遍历数组、生成固定范围数字、处理有明确长度的数据。
- 能直接控制起始、终止和步进,逻辑清晰
- 支持用 i 精确访问元素位置(如
arr[i]) - 嵌套循环写起来自然,比如二维数组或乘法表
- 示例:遍历 5 个按钮并绑定点击事件
while 循环适合条件驱动、次数不确定的情况
比如等待用户输入、读取流数据、重试机制、状态变化触发退出。
- 先判断条件再执行,更强调“满足什么才继续”
- 循环变量通常在循环体内部更新,容易漏写导致死循环
- 适合配合 break 或外部状态变更来终止
- 示例:不断提示用户输入密码,直到正确为止
do...while 是“至少执行一次”的 while 变体
当业务逻辑必须先做一次,再看要不要重复时用它。
立即学习“Java免费学习笔记(深入)”;
- 比如首次展示菜单、初始化配置后检查有效性
- 条件写在末尾,天然避免零次执行的尴尬
- 注意:哪怕条件一开始为 false,循环体也执行一遍
for...in 和 for...of 各有分工,别混用
for...in 遍历对象属性名(包括原型链上的可枚举属性),记得加 hasOwnProperty 过滤;for...of 遍历数组、字符串、Map、Set 等可迭代值,不关心索引,更安全简洁。
- 遍历纯对象 → 优先用
Object.keys(obj).forEach()或for...in + hasOwnProperty - 遍历数组/类数组 → for...of 比传统 for 更直观,forEach/map 更函数式
- 不要用 for...in 遍历数组——顺序不保证,还可能遍历到意外属性
基本上就这些。不复杂但容易忽略细节,比如 while 忘写递增、for...in 没过滤原型属性、for...of 误用于普通对象——踩过坑就知道该选谁了。











