在 javascript 中,`return` 不能直接嵌入三元运算符(`condition ? expr1 : expr2`)内部,因为三元运算符本身是表达式,用于求值而非执行语句;`return` 是语句,必须独立出现在可执行上下文中。
你遇到的 SyntaxError: Unexpected token return 错误,根本原因在于试图在三元运算符中直接写 return "Computer wins!" —— 这在语法上是非法的。JavaScript 解析器期望三元运算符右侧是表达式(如字符串、变量、函数调用等),而 return 是控制流语句,只能出现在函数体顶层或块级作用域中,不能作为子表达式存在。
✅ 正确做法是:先用三元运算符计算出结果值,再统一 return:
const determineWinner = (userChoice, computerChoice) => { if (userChoice === computerChoice) { return "It's a tie!"; } let result; switch (userChoice) { case 'rock': result = computerChoice === 'paper' ? "Computer wins!" : "User wins!"; break; case 'paper': result = computerChoice === 'scissors' ? "Computer wins!" : "User wins!"; break; case 'scissors': result = computerChoice === 'rock' ? "Computer wins!" : "User wins!"; break; default: result = "Invalid choice"; } return result; // ✅ 单一、清晰的返回点 };
? 更简洁的优化方案(推荐):
既然逻辑本质是「根据 userChoice 和 computerChoice 的组合判定胜负」,可完全避免 switch,改用对象映射或直接条件判断,提升可读性与可维护性:
const determineWinner = (userChoice, computerChoice) => {
if (userChoice === computerChoice) return "It's a tie!";
const winConditions = {
rock: 'scissors',
paper: 'rock',
scissors: 'paper'
};
return winConditions[userChoice] === computerChoice
? "User wins!"
: "Computer wins!";
};⚠️ 注意事项:
运行 determineWinner('rock', 'rock') 将正确输出 "It's a tie!",而 determineWinner('rock', 'paper') 返回 "Computer wins!" —— 逻辑清晰,语法合规,健壮可靠。