JavaScript while循环未重新赋值变量导致年龄校验逻辑失效问题求助
JavaScript while循环未重新赋值变量导致年龄校验逻辑失效问题求助
兄弟,我瞅了下你写的代码,问题根源很明显——你在while循环里没给age变量重新赋值啊!
你最开始通过prompt获取了年龄并存到age里,但进入循环后,你只是弹出了新的输入框,却没把用户新输入的年龄存回age里。这就导致不管用户在循环的输入框里填啥,age永远是第一次输入的那个值:
- 如果第一次填的是小于18的数,循环条件
age<18会一直成立,无限弹出输入框,停不下来; - 如果第一次不小心填了18或更大的数,直接就跳过循环显示“You can proceed”了,完全没起到你想要的“只要年龄不够就一直要求重新输入”的校验作用。
给你改好的基础版代码:
let age = Number(prompt("Please enter your age: ")) while(age < 18){ // 把新输入的年龄重新赋值给age变量,这样循环条件才会根据新值判断 age = Number(prompt("You are too young, please re-enter your age: ")) } console.log("You can proceed")
另外,我还帮你优化了下,加上了非法输入的校验(比如用户输入字母、负数的情况),用do-while循环会更合适,因为它能先执行一次输入再判断条件,避免第一次就输入无效内容的问题:
let age; // 先确保输入的是有效的正整数年龄 do { age = Number(prompt("Please enter your age: ")) // 如果输入不是有效数字或者是负数,提示用户修正 if (isNaN(age) || age < 0) { alert("Please enter a valid positive number for your age.") } } while (isNaN(age) || age < 0 || age < 18) console.log("You can proceed")
备注:内容来源于stack exchange,提问作者Emmanuel
相关产品推荐
相关产品推荐

