Вернитесь внутрь, если еще и используя толстую стрелку

Ошибка, когда я пытаюсь вернуть userInput внутри, если еще синтаксический сахар в функции жирной стрелки. Добрый совет.

Используя ES5 мой код работает нормально;

userInput = userInput.toLowerCase();
if (userInput === 'rock' || userInput === 'paper' || userInput === 'scissors' ) {
  return userInput;
} else {
  console.log('Error!');
}
console.log(getUserChoice('Paper')); // console prints 'paper'
console.log(getUserChoice('fork')); // console prints 'Error!' and `undefined`

Но когда я использую жирную стрелку ES6 и если.. еще синтаксический сахар, возникает ошибка. Примечание: я хочу вернуть userInput сразу же после выполнения первого условия оператора if..else.

const getUserChoice = userInput => {
  userInput = userInput.toLowerCase();
  (userInput === 'rock' || userInput === 'paper' || userInput === 'scissors')? return userInput : console.log('Error');
};

console.log(getUserChoice('Paper'));
console.log(getUserChoice('fork'));

Появляется ошибка ниже:

  (userInput === 'rock' || userInput === 'paper' || userInput === 'scissors')? return userInput : console.log('Error');
                                                                               ^^^^^^
SyntaxError: Unexpected token return

3 ответа

Решение

Вам необходимо указать return в начале условного высказывания вроде:

return (userInput === 'rock' || userInput === 'paper' || userInput === 'scissors')? userInput : console.log('Error'); 

Существует два способа создания разных веток в JavaScript:

1) if() оператор для ветвления оператора или блока операторов

 if(cond) {
   statement1;
   statement2;
 } else statement 3

2) Тернарный оператор, который разветвляет выражения.

 cond ? expression1 : expression2

return является утверждением, и утверждение не может быть внутри выражения. Ты либо return весь троичный или вы используете if,

Тройки были введены давным-давно, это не имеет ничего общего с функцией стрелки.

Ключевым моментом здесь является осознание того, что ?: это оператор. Он оценивается так же, как любой другой оператор, такой как + а также * создать новое значение. Имея это в виду, вы можете понять, почему размещение return не имеет смысла в вашей оригинальной версии. return это команда (или, точнее, утверждение), а не значение.

Другие вопросы по тегам