Я не могу изменить заглавную букву во входном слове без появления ошибки. Я использовал toLowerCase ()

#javascript #console.log

#javascript #console.log

Вопрос:

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

console.log(getUserChoice('Scissors'));
  

// Похоже, это не работает. Только если я набираю слова всеми строчными буквами.

Комментарии:

1. Удалите изменение на нижний регистр из объявления параметра внутри функции.

Ответ №1:

 const getUserChoice = (userInput) => {
  userInput = userInput.toLowerCase()
  
  if (userInput === 'rock' || userInput === 'paper' || userInput === 'scissors') {
    return userInput;
  } else {
    return 'Error!'; //changed to return
  }
};
  

Комментарии:

1. Хотя этот код может отвечать на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.

2. @adiga, руководство приветствуется.

3. @Kasalwe бесстыдник, но, пожалуйста, оцените мой ответ. Проблема и решение очевидны для опытного разработчика, но мне потребовалось намного больше времени, чтобы написать это, потому что я потратил время, чтобы объяснить, что было не так, почему, какие были неверные предположения и что на самом деле делает код, чтобы предоставить ответ, который не только объясняет, что следует изменить, но и почему.

Ответ №2:

 const getUserChoice = (userInput=userInput.toLowerCase()) => {
  

В этой строке вы создаете значение по умолчанию для аргумента функции, которое будет, undefined если userInput оно не существует в области видимости. Он не манипулирует передаваемым вами аргументом.

Например, функцию, подобную этой:

 const hello = (name="stranger") => console.log(`hello, ${name}`)
  

скажет «привет, незнакомец», если вызывается без аргументов, и «привет, ножницы», если вызывается как hello("Scrissors") .

Когда вы вызываете функцию: getUserChoice('Scissors') аргумент по умолчанию переопределяется тем, что вы передали, и userInput внутри вашей функции есть "Scissors" .

Вам нужно выполнить преобразование внутри тела функции:

 const getUserChoice = (userInput) => {
   userInput=userInput.toLowerCase()
   /* now userInput is the lowercase version of the argument you pass */
}
  

Ответ №3:

Вы можете попробовать сделать

 const getUserChoice = (Input) => {
  let userInput = Input.toLowerCase();
  if (userInput==='rock' || userInput==='paper' || userInput==='scissors') {
    return userInput;
  } else {
    console.log('Error!');
  }
};
console.log(getUserChoice('Scissors'));