功能参数类型

时间:2019-03-04 04:53:42

标签: javascript function arguments

我正在使用代码学院的基本剪刀石头布游戏。 我不懂一步。

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 :(得分: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变量,这就是为什么您会收到错误消息。