Тернарный оператор внутри функции стрелки - PullRequest
0 голосов
/ 26 июня 2018

У меня есть простая игра «Камень, ножницы, бумага», я написал свою функцию в виде стрелки, а свою функцию 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 голосов
/ 26 июня 2018

Как отмечали другие

  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') не является чем-то, что нужно возвращать.

Не ясно, что вы хотели, чтобы произошло.Похоже, вы хотели напечатать ошибку, если пользователь выбрал не один из rock, paper или scissors

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, либо не определено.Часто это достаточно хорошо, но если вы действительно хотите, чтобы оно было true или false, тогда !! выполняет преобразование, как в

const userInput = 'bananas'
const temp1 = validInputs[userInput];   // temp1 = undefined
const temp2 = !temp1;                   // temp2 = true
const temp3 = !temp2;                   // temp3 = false

Что и делает !!

...