JavaScript用do while写投票功能时浏览器跳过循环如何解决
问题根因
window.prompt的返回值是字符串类型,你的代码里用了严格不等运算符!==判断输入值,字符串的"1"和数字1类型不匹配,所以哪怕你输入了1/2/3,也会命中voto !== 1 && voto !== 2 && voto !== 3的判断逻辑,直接把end设为true,循环只执行一次就退出,看起来就像直接跳过了循环步骤。
解决方法
在拿到输入后先转为数字类型再做判断即可,同时可以把多个并列if调整为else if减少不必要的判断,修改后的代码如下:
let end = false; let votosFulano = 0; let votosCicrano = 0; let votosBeltrano = 0; let mostVoted = "no votes yet"; do { let voto = window.prompt("Vote 1 for Fulano, 2 for Cicrano and 3 for Beltrano ou outro número para encerrar a votação"); // 输入转数字,用户点取消返回null转成NaN也会正常触发结束逻辑 voto = Number(voto); if (voto === 1) { votosFulano += 1; end = false; } else if (voto === 2) { votosCicrano += 1; end = false; } else if (voto === 3) { votosBeltrano += 1; end = false; } else { if (votosFulano > votosBeltrano && votosFulano > votosCicrano) { mostVoted = "Fulano"; } else if (votosBeltrano > votosFulano && votosBeltrano > votosCicrano) { mostVoted = "Beltrano"; } else if (votosCicrano > votosFulano && votosCicrano > votosBeltrano) { mostVoted = "Cicrano"; } end = true; } } while (end === false); if (votosFulano == 0 && votosCicrano == 0 && votosBeltrano == 0) { alert("No votes"); } else { alert("Winner is " + mostVoted); }
内容的提问来源于stack exchange,提问作者Adjardo Lobo
相关产品推荐
相关产品推荐

