箭头函数内的三元运算符

时间:2018-06-26 00:17:52

标签: javascript function ecmascript-6 ternary-operator

我有一个简单的Rock,Paper,Scissors游戏,我已经将我的函数编写为箭头函数,并将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');

1 个答案:

答案 0 :(得分:4)

正如其他人指出的

  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;

但是您返回的是函数getUserChoice,或者您什么也没有返回,因为console.log('msg')不能返回。

不清楚您想发生什么。如果用户的选择不是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

!!在做什么