Тип функциональных параметров - PullRequest
0 голосов
/ 04 марта 2019

Я работаю с основной бумажной игрой о каменных ножницах на Codecademy.Я не понимаю ни одного шага.

const getUserChoice = function (userInput) {
console.log(userInput)
userInput = userInput.toLowerCase();
if ((userInput === 'paper') || userInput === 'scissors' || userInput === 'rock') {
    return userInput;
} else {
    console.log('Wrong user input')
}

}

Почему, когда я указываю в качестве аргумента что-то еще, тогда строка не работает?

Это прекрасно работает сgetUserChoice ('AAA'), но он не работает с getUserChoice (aa).Может кто-нибудь объяснить мне, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Причина в том, что aa является переменной, но если вы назначите ей строку, она будет работать.

Также не используется toLowerCase().Он будет работать со строкой, но если вы назначите число для aa, как let aa = 1, это не будет работать.Не здесь 1 присваивается как число, а не строка, где aa='1' будет строкой

let aa = 'AAA'

const getUserChoice = function(userInput) {
  console.log(userInput)
  userInput = userInput.toLowerCase();
  if ((userInput === 'paper') || userInput === 'scissors' || userInput === 'rock') {
    return userInput;
  } else {
    console.log('Wrong user input')
  }
}


getUserChoice(aa)
0 голосов
/ 04 марта 2019

Когда вы пытаетесь запустить getUserChoice ('AAA'), вы пытаетесь передать 'AAA' в функцию.'AAA' - это строка (символы начинаются и заканчиваются в одинарных кавычках), поэтому функция работает.

Когда вы пытаетесь запустить getUserChoice (aa), вы пытаетесь передать aa в функцию.В этом случае aa не начинается и не заканчивается ', поэтому это не строка.В таком случае JavaScript предполагает, что aa является переменной.Теперь, если переменная aa не определена, вы получите ошибку.

Если вы запустите var aa = 'some string';, а затем запустите getUserChoice (aa), это не вызовет ошибку.

В двух словах, ваша переменная aa не определена, поэтому выполучаю ошибку.

0 голосов
/ 04 марта 2019

Он прекрасно работает с getUserChoice('AAA'), но не работает с getUserChoice (aa).
'AAA' - это string, поскольку он заключен в ''.aa относится к переменной с именем aa.
Если aa не определено, оно выдаст ошибку.

Uncaught ReferenceError: aa не определено

Если aa имеет значение, но его нет string, оно все равно выдаст ошибку, потому что вы вызываете строковый метод toLowerCase() в своей функции.

"Uncaught TypeError: userInput.toLowerCaseне является function "

Чтобы исправить это преобразование userInput в string перед вызовом toLowerCase.Используйте String() для изменения типа.

let aa = 3;
const getUserChoice = function (userInput) {
  userInput = String(userInput).toLowerCase();
  if ((userInput === 'paper') || userInput === 'scissors' ||      userInput === 'rock') {
      console.log("correct");
     return userInput;
  } else {
    console.log('Wrong user input')
  }
}
getUserChoice(aa)
getUserChoice(function(){console.log('sss')})
getUserChoice(55232.3323)
getUserChoice(undefined)
getUserChoice(true)
getUserChoice('paper');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...