You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:36:03