JavaScript if判断异常,输入非法值未打印Error反而返回原值
问题根因
你的if判断条件写法不符合JS逻辑运算符规则,运行时永远返回true,所以所有输入都会走进if分支直接返回值,不会触发else的Error打印。
JS中|| 逻辑或运算符是逐段判断真假值,你写的userInput === "rock" || "scissors" 会被拆成两步判断:
- 第一步先算
userInput === "rock",结果为真的话整体条件为真 - 第一步结果为假的话,会直接判断
"scissors"的布尔值,非空字符串的布尔值永远是true,所以不管输入是什么,整个if条件永远成立
修复方案
你需要把每个判断条件都补全相等判断,或者用数组包含的方法简化写法:
写法1:补全所有相等判断
const getUserChoice = (userInput) => { userInput = userInput.toLowerCase(); if (userInput === "rock" || userInput === "scissors" || userInput === "paper" || userInput === "bomb") { return userInput; } else { console.log("Error"); } };
写法2:用数组includes方法简化(更易维护)
const getUserChoice = (userInput) => { userInput = userInput.toLowerCase(); const validOptions = ["rock", "scissors", "paper", "bomb"]; if (validOptions.includes(userInput)) { return userInput; } else { console.log("Error"); } };
修改后调用getUserChoice("Randommm") 就会触发else分支打印Error,传入rocK 还是可以正常返回rock,符合预期。
内容的提问来源于stack exchange,提问作者longan177
相关产品推荐
相关产品推荐

