JavaScript中如何编写正确判断语句解决OR运算符失效的循环退出问题
问题分析与修正方案
嘿,这个问题我一眼就看出症结啦——你的while循环条件逻辑搞反了!
为什么原来的代码不生效?
你用了||(逻辑或)运算符,意味着只要LastName != 'EXIT'和LastName != 'exit'这两个条件有一个成立,循环就会继续。但仔细想:
- 如果用户输入
exit,那么LastName != 'EXIT'是true,整个表达式结果为true,循环继续; - 如果用户输入
EXIT,那么LastName != 'exit'是true,表达式结果还是true,循环还是停不下来; - 不管输入啥,这俩条件总有一个成立,循环永远不会终止!
修正方法
我们需要把条件改成“当LastName既不是EXIT也不是exit时,才继续循环”,这时候应该用&&(逻辑与)运算符:
方案一:使用&&修正循环条件
var FirstName = ''; var MiddleName = ''; var LastName = ''; var FullName = ''; while (LastName != 'EXIT' && LastName != 'exit') { FirstName = prompt('What is your first name'); MiddleName = prompt('What is your middle name'); LastName = prompt('What is your last name'); // 新增判断:只有当用户没输入退出指令时,才弹出欢迎提示 if (LastName !== 'EXIT' && LastName !== 'exit') { FullName = FirstName + ' ' + MiddleName + ' ' + LastName; alert('Welcome, ' + FullName); } }
方案二:用数组includes简化判断(更现代的写法)
如果你想让代码更简洁,可以用数组的includes方法,配合取反运算符!:
var FirstName = ''; var MiddleName = ''; var LastName = ''; var FullName = ''; // 判断LastName不在退出指令数组里时,继续循环 while (!['EXIT', 'exit'].includes(LastName)) { FirstName = prompt('What is your first name'); MiddleName = prompt('What is your middle name'); LastName = prompt('What is your last name'); if (!['EXIT', 'exit'].includes(LastName)) { FullName = `${FirstName} ${MiddleName} ${LastName}`; // 模板字符串更易读 alert(`Welcome, ${FullName}`); } }
额外优化点
- 建议用
!==(严格不等于)代替!=,避免隐式类型转换带来的意外问题; - 模板字符串(
${变量})比字符串拼接更清晰,是ES6+的推荐写法; - 新增的if判断很重要:不然用户输入
exit/EXIT时,还是会弹出包含退出指令的欢迎语,体验不好。
内容的提问来源于stack exchange,提问作者Jamie Doig
相关产品推荐
相关产品推荐

