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

Ошибка при попытке вернуть 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

должно быть "возврат" перед этой строкой. Не имеет смысла в тернарном операторе. И если вы настроите lint, как вы это делаете, он будет жаловаться, что не все маршруты return

epascarello 27.11.2018 17:52

И прекрасный пример того, как первый синтаксис более понятен и легче поддается отладке.

abalter 27.11.2018 17:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
1 487
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно указать return в начале условного оператора, например:

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

@WahinyaBrian рад помочь

Ankit Agarwal 27.11.2018 17:55

Есть два способа создать разные ветки в JavaScript:

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

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

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

 cond ? expression1 : expression2

return - это оператор, и оператор не может находиться внутри выражения. Вы либо return целиком, либо используете if.

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

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

Да, спасибо, это, по крайней мере, помогает мне понять логику размещения возврата

Wahinya Brian 27.11.2018 19:45

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