Я работаю над базовой игрой «камень-ножницы-бумага» в codecademy. Я не понимаю один шаг.
const getUserChoice = function (userInput) {
console.info(userInput)
userInput = userInput.toLowerCase();
if ((userInput === 'paper') || userInput === 'scissors' || userInput === 'rock') {
return userInput;
} else {
console.info('Wrong user input')
}
}
Почему, когда я ставлю в качестве аргумента что-то еще, строка не работает?
Он отлично работает с getUserChoice('AAA'), но не работает с getUserChoice (aa). Может кто-нибудь объяснить это мне, пожалуйста?



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


Он отлично работает с getUserChoice('AAA'), но не работает с getUserChoice (aa).'AAA' — это string, завернутый внутрь ''. aa относится к переменной с именем aa.
Если aa не определено, будет выдана ошибка.
Uncaught ReferenceError:
aais not defined
Если aa имеет значение, но не string, он все равно выдаст ошибку, потому что вы вызываете строковый метод toLowerCase() в своей функции.
"Uncaught TypeError:
userInput.toLowerCaseis not afunction"
Чтобы исправить это, преобразуйте userInput в string перед вызовом toLowerCase. Использовать
String() для изменения типа.
let aa = 3;
const getUserChoice = function (userInput) {
userInput = String(userInput).toLowerCase();
if ((userInput === 'paper') || userInput === 'scissors' || userInput === 'rock') {
console.info("correct");
return userInput;
} else {
console.info('Wrong user input')
}
}
getUserChoice(aa)
getUserChoice(function(){console.info('sss')})
getUserChoice(55232.3323)
getUserChoice(undefined)
getUserChoice(true)
getUserChoice('paper');Причина в том, что aa является переменной, но если вы присвоите ей строку, она будет работать.
Также не использование toLowerCase(). Он будет работать со строкой, но если вы присвоите число aa, например let aa = 1, это не сработает. Не здесь 1 назначается как число, а не строка, где aa='1' будет строкой
let aa = 'AAA'
const getUserChoice = function(userInput) {
console.info(userInput)
userInput = userInput.toLowerCase();
if ((userInput === 'paper') || userInput === 'scissors' || userInput === 'rock') {
return userInput;
} else {
console.info('Wrong user input')
}
}
getUserChoice(aa)Когда вы пытаетесь запустить getUserChoice ('AAA'), вы пытаетесь передать 'AAA' функции. 'AAA' — это строка (символы, начинающиеся и заканчивающиеся одинарными кавычками), поэтому функция работает.
Когда вы пытаетесь запустить getUserChoice (aa), вы пытаетесь передать aa функции. В этом случае aa не начинается и не заканчивается на ', поэтому это не строка. В таком случае JavaScript предполагает, что aa является переменной. Теперь, если переменная aa не определена, вы получите сообщение об ошибке.
Если вы запустите var aa = 'some string';, а затем запустите getUserChoice (aa), это не вызовет ошибки.
Короче говоря, ваша переменная aa не определена, поэтому вы получаете ошибку.
isnt working with getUserChoice (aa)Вы звонитеgetUserChoiceс переменнойaa. Что содержит переменная с именемaa?