JS条件判断为false仍执行,prompt-sync输入0未自动启动游戏问题
问题原因
- 输入提示的执行顺序逻辑错误:第四、第五位玩家的
prompt()调用写在了start状态判断之前,哪怕你在输入第三位玩家时输入0把start设为true,代码还是会先执行后续的prompt()语句弹出输入框,之后才会判断start的状态,所以提前启动的逻辑不会生效。 - 循环条件语法错误:最后的
while (start = true)是赋值操作,不是相等判断,执行时会强制把start设为true,导致循环永久运行无法退出。 - 类型判断不严谨:
prompt-sync返回的所有输入都是字符串类型,直接用cmd != 0做弱类型比较存在隐式转换的风险,容易出现预期外的匹配结果。
修复方案
调整输入逻辑的执行顺序,只有当start未激活时才弹出后续玩家的输入提示,同时修正循环条件和类型判断,修复后代码如下:
const prompt = require("prompt-sync")({ sigint: true }); let cmd; let start = false; // 初始化用布尔值更符合语义 const stats = { player1: { name: "", money: 0, properties: [], position: 0, }, player2: { name: "", money: 0, properties: [], position: 0, }, player3: { name: "", money: 0, properties: [], position: 0, }, player4: { name: "", money: 0, properties: [], position: 0, }, player5: { name: "", money: 0, properties: [], position: 0, } } cmd = prompt("支持最多5名玩家,输入第一位玩家的名称:") stats.player1.name = cmd; cmd = prompt("输入第二位玩家的名称:") stats.player2.name = cmd; cmd = prompt("输入第三位玩家的名称,输入0直接开始游戏:") if (cmd !== '0') { stats.player3.name = cmd; } else { start = true; } // 仅未启动游戏时才弹出后续玩家的输入提示 if (!start) { cmd = prompt("输入第四位玩家的名称,输入0直接开始游戏:") if (cmd !== '0') { stats.player4.name = cmd; } else { start = true; } } if (!start) { cmd = prompt("输入第五位玩家的名称,输入0直接开始游戏:") if (cmd !== '0') { stats.player5.name = cmd; } else { start = true; } } // 修正循环条件为严格相等判断,可自行补充命令逻辑终止循环 while (start === true) { cmd = prompt("输入指令:") // 示例:输入exit即可退出循环 if (cmd === 'exit') { start = false } }
内容的提问来源于stack exchange,提问作者everything2067
相关产品推荐
相关产品推荐

