Ошибка при попытке вернуть userInput внутри условного оператора в функции жирной стрелки. Добрый совет.
Используя ES5, мой код работает нормально;
userInput = userInput.toLowerCase();
if (userInput === 'rock' || userInput === 'paper' || userInput === 'scissors' ) {
return userInput;
} else {
console.info('Error!');
}
console.info(getUserChoice('Paper')); // console prints 'paper'
console.info(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.info('Error');
};
console.info(getUserChoice('Paper'));
console.info(getUserChoice('fork'));
Появится ошибка ниже:
(userInput === 'rock' || userInput === 'paper' || userInput === 'scissors')? return userInput : console.info('Error');
^^^^^^
SyntaxError: Unexpected token return
И прекрасный пример того, как первый синтаксис более понятен и легче поддается отладке.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно указать return в начале условного оператора, например:
return (userInput === 'rock' || userInput === 'paper' || userInput === 'scissors')? userInput : console.info('Error');
@WahinyaBrian рад помочь
Есть два способа создать разные ветки в JavaScript:
1) Оператор if () для перехода заявление или блок заявлений
if (cond) {
statement1;
statement2;
} else statement 3
2) Тернарный оператор, ответвляющий выражения.
cond ? expression1 : expression2
return - это оператор, и оператор не может находиться внутри выражения. Вы либо return целиком, либо используете if.
Тернары были введены очень давно, это не имеет ничего общего со стрелочной функцией.
Ключевым моментом здесь является осознание того, что ?: - это оператор. Он оценивается так же, как любой другой оператор, такой как + и *, для создания нового значения. Имея это в виду, вы можете понять, почему размещение return не имеет смысла в вашей исходной версии. return - это команда (или, точнее, утверждение), а не значение.
Да, спасибо, это, по крайней мере, помогает мне понять логику размещения возврата
должно быть "возврат" перед этой строкой. Не имеет смысла в тернарном операторе. И если вы настроите lint, как вы это делаете, он будет жаловаться, что не все маршруты
return