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
相关产品推荐
相关产品推荐

