我正在使用代码学院的基本剪刀石头布游戏。 我不懂一步。
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)配合使用效果却不佳。 有人可以给我解释一下吗?
答案 0 :(得分:0)
与getUserChoice('AAA')
一起使用效果很好,但与getUserChoice (aa)
一起使用却不起作用。
'AAA'
是一个string
,包裹在''
中。 aa
引用名为aa
的变量。
如果未定义aa
,则会引发错误。
未捕获的ReferenceError:
aa
未定义
如果aa
有一个值,但没有string
,则它将仍然引发错误,因为您正在函数中调用字符串方法toLowerCase()
。
“未捕获的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');
答案 1 :(得分:0)
原因是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)
答案 2 :(得分:0)
当您尝试运行getUserChoice ('AAA')
时,您正试图将'AAA'
传递给该函数。 'AAA'
是一个字符串(字符以单引号开头和结尾),因此该函数有效。
当您尝试运行getUserChoice (aa)
时,您正试图将aa
传递给该函数。在这种情况下,aa
不会以'
开头和结尾,因此它不是字符串。在这种情况下,JavaScript假定aa
是一个变量。现在,如果未定义aa
变量,则将出现错误。
如果您先运行var aa = 'some string';
,然后再运行getUserChoice (aa)
,则不会导致错误。
简而言之,没有定义您的aa
变量,这就是为什么您会收到错误消息。