箭头函数中的三元运算符

Ternary Operator inside an Arrow Function

我有一个简单的剪刀石头布游戏,我将函数编写为箭头函数,将 if/else 编写为三元运算符,但 returns 出错。它适用于香草 if / else 但不适用于三元。

const getUserChoice = userInput => {

  // normalizes all inputs to lowercase
  userInput = userInput.toLowerCase();

  // checks whether the inputs are valid
  userInput === 'rock' || 'paper' || 'scissors' ? return getUserChoice : console.log('please enter a valid entry');

};

getUserChoice('rock');

正如其他人指出的那样

  userInput === 'rock' || 'paper' || 'scissors' ? return getUserChoice : console.log('please enter a valid entry');

无效JavaScript。它甚至不是一个真正有效的结构。

三元运算符用于根据条件选择 A 或 B。

 if (condition) {
   return A;
 } else {
   return B;
 }

使用三元运算符

 return condition ? A : B;

但是你 returning getUserChoice 这是函数,或者你 return 什么都没有,因为 console.log('msg') 不是 return 的东西。

不清楚你想要发生什么。如果用户的选择不是 rockpaperscissors

之一,您似乎想要打印错误
const validateUserChoice = userInput => {

  // normalizes all inputs to lowercase
  userInput = userInput.toLowerCase();

  // checks whether the inputs are valid
  const isValid = userInput === 'rock' || 
                  userInput === 'paper' ||
                  userInput === 'scissors';

  if (!isValid) {
    console.log('please enter a valid entry');
  };

  return isValid;
}

???

请注意,有更快的方法可以检查 userInput 是否是众多有效选项之一。一个可能是

const validInputs = {
  rock: true,
  paper: true,
  scissors: true,
};
const validateUserChoice = userInput => {

  // normalizes all inputs to lowercase
  userInput = userInput.toLowerCase();

  // checks whether the inputs are valid
  const isValid = !!validInputs[userInput];

  if (!isValid) {
    console.log('please enter a valid entry');
  };

  return isValid;
}

将验证与错误报告混合使用可能也不是最佳做法。

const validInputs = {
  rock: true,
  paper: true,
  scissors: true,
};
const validateUserChoice = userInput => {

  // normalizes all inputs to lowercase
  userInput = userInput.toLowerCase();

  // checks whether the inputs are valid
  return !!validInputs[userInput];
};

if (!validateUserInput(someInput)) {
  console.log('please enter a valid entry');
};

请注意,!! 只会让虚假的东西变成真实的。

validInputs[userInput]

将是 true 或未定义。通常这就足够了,但如果您真的希望它是 truefalse,那么 !! 会像

那样进行转换
const userInput = 'bananas'
const temp1 = validInputs[userInput];   // temp1 = undefined
const temp2 = !temp1;                   // temp2 = true
const temp3 = !temp2;                   // temp3 = false

!! 正在做什么