选 while 还是 do-while,关键看循环体是否必须至少执行一次:while 先判断后执行,适合输入校验等可能零次执行的场景;do-while 先执行后判断,确保至少运行一次,适用于菜单交互、初始化后轮询等场景。

选 while 还是 do-while,关键看「循环体是否必须至少执行一次」。
用 while:条件不满足时,一次都不执行
适合需要先验证再行动的场景,比如用户输入校验、数据加载前检查、状态就绪判断等。
- 执行逻辑:先判断条件 → 为 true 才进循环体 → 否则直接跳过
- 常见写法:必须手动更新变量,否则极易陷入死循环
- 典型例子:密码登录弹窗
代码示例:
let pwd = prompt("请输入密码");
while (pwd !== "123456") {
pwd = prompt("密码错误,请重试");
}
console.log("登录成功");
如果第一次就输对了,循环体零次执行;输错才反复提示。
立即学习“Java免费学习笔记(深入)”;
用 do-while:无论如何,先干一次再说
适合「默认要执行,后续再看要不要继续」的交互或初始化流程,比如菜单选择、首次确认、日志记录起始点等。
- 执行逻辑:先无条件执行一次循环体 → 再判断条件 → 为 true 就再执行
- 即使初始条件为 false,也保证至少运行一遍
- 典型例子:首次弹出“你爱我吗?”并持续追问直到答对
代码示例:
let answer;
do {
answer = prompt("你爱我吗?");
} while (answer !== "我爱你");
alert("收到 ❤️");
哪怕用户直接关掉弹窗(返回 null),也已执行了一次 prompt。
对比速查表
| 场景 | 推荐循环 | 原因 |
|------|----------|------|
| 遍历数组或已知次数 | 不适用(优先用 for) | while/do-while 缺少内置计数结构 |
| 输入校验(可能一开始就不合法) | while | 条件不满足可跳过,避免冗余操作 |
| 菜单/命令行交互(至少显示一次选项) | do-while | 用户需要先看到界面,再决定是否重试 |
| 初始化后需循环检查状态 | do-while | 先执行初始化动作,再轮询判断完成条件 |
容易踩的坑
- while 忘记更新变量 → 死循环卡死页面
- do-while 条件写反(比如把 )→ 多执行一轮或提前退出
- 在循环体内修改了影响条件判断的外部变量,但逻辑没理清 → 行为不可预测


















