You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中do-while循环无法正常工作问题求助

你的do-while循环问题分析与修复方案

嘿,我帮你瞅了下这段代码,问题主要出在两个地方,导致循环根本停不下来,完全达不到你想要的效果:

问题1:重复声明变量

你在代码开头已经用var userEntree = prompt(...)声明了变量,但在do代码块里又重新写了var userEntree = prompt(...)——这会在do块内创建一个局部变量,不仅多余,还可能导致变量作用域的混淆,完全没必要重复声明。

问题2:循环条件逻辑错误

这是最关键的问题!你用了||(逻辑或)来判断条件,意思是只要其中一个条件成立,循环就会继续。举个例子:

  • 如果用户输入burger,那么userEntree.toLowerCase() != "chicken"是true,整个条件就会变成true,循环继续执行;
  • 不管用户输入三个选项里的哪一个,另外两个不等的条件总会成立,所以循环永远停不下来!

正确的逻辑应该用&&(逻辑与):只有当输入既不是burger,也不是chicken,还不是fish的时候,才继续循环。


修复后的代码

// 第一次询问用户
var userEntree = prompt('What would you like to eat?');

// 当输入不在允许范围内时,重复询问
do {
  userEntree = prompt('What would you like to eat?');
} while(userEntree.toLowerCase() !== "burger" && userEntree.toLowerCase() !== "chicken" && userEntree.toLowerCase() !== "fish");

更简洁的优化方案

如果以后要添加更多可选菜品,写一堆&&会很麻烦,建议把允许的菜品放进数组,用includes方法判断,代码更易维护:

// 定义允许的菜品列表
var allowedEntrees = ['burger', 'chicken', 'fish'];
// 第一次询问
var userEntree = prompt('What would you like to eat?');

// 只要输入不在列表里,就继续询问
do {
  userEntree = prompt('What would you like to eat?');
} while(!allowedEntrees.includes(userEntree.toLowerCase()));

这样以后要加新菜品,直接往allowedEntrees数组里加就行啦!

内容的提问来源于stack exchange,提问作者Zsglatz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:03:09