JS密码猜测循环:如何正确显示「无剩余尝试次数」提示?
密码验证循环逻辑修正
原代码的核心问题
- 错误使用赋值操作
i = 0而非严格相等判断i === 0,但更关键的是:循环条件为i > 0,循环执行时i的取值是3、2、1,永远不会等于0,所以该分支永远无法触发。 - 条件分支顺序错误:应优先判断密码正确的情况,再处理错误分支;三次错误的提示需要在最后一次尝试失败时触发。
修正后的代码
for (let i = 3; i > 0; i--) { let password = prompt("What is the password?"); // 优先判断密码是否正确 if (password?.toUpperCase() === "BINGO") { alert("You may enter"); break; // 验证通过后立即退出循环 } else { // 判断是否是最后一次尝试机会 if (i === 1) { alert("No more tries left"); } else { alert("Try again"); } } }
关键改动说明
- 调整条件顺序:先验证密码正确性,通过后用
break终止循环,避免多余的输入提示。 - 错误分支中,用
i === 1判断是否为最后一次尝试(此时是第三次输入机会),输错则触发"No more tries left"提示。 - 增加
password?.toUpperCase()可选链:防止用户点击prompt的「取消」按钮时,password为null导致调用toUpperCase()报错(若环境不支持可选链,可替换为password && password.toUpperCase())。
内容的提问来源于stack exchange,提问作者Iryshka Ka
相关产品推荐
相关产品推荐

