【问题标题】:why is the return statment returning the whole if statement?为什么 return 语句返回整个 if 语句?
【发布时间】:2022-12-09 03:43:18
【问题描述】:

我正在对代码战争进行测试,如果名称以“r”或“R”开头,它会要求我返回name + 'plays banjo'。我有以下代码

const name = 'randy'

function areYouPlayingBanjo(name) {

  const firstLetter = name.split('', 1)
  if (firstLetter==='R' || firstLetter==='r'){
      return `plays banjo`
    }else{
      `does not play banjo`
    }
}

console.log(areYouPlayingBanjo(name))

每当我运行它时,它只返回 if 语句,而不是 if 语句的值。我究竟做错了什么?为什么它不返回 if 语句的“返回”部分而不是整个语句?

【问题讨论】:

  • 你期望它返回什么?一旦一个函数returns,它就完成了。您只返回plays banjo。您不会返回任何其他内容,即使在您的 else 声明中也是如此。
  • 您在 else 块中缺少 return,并且您缺少在 if 块的返回值中包含 name
  • split 返回一个数组,但您没有对第一个元素做任何事情。 name[0] 更简洁。

标签: javascript corewars


【解决方案1】:

您有 2 个问题,第一个是 split('',1) 将返回包含一个元素的数组,而不是字符串,在这种情况下它将返回 ['r'],因此要正确检查您需要执行 firstLetter[0]

第二个问题是您在 else 中缺少 return 语句

这是正确的实现:

const name = 'randy'

function areYouPlayingBanjo(name) {

  const firstLetter = name.split('', 1)[0]
  if (firstLetter==='R' || firstLetter==='r'){
      return `plays banjo`
    }else{
      return `does not play banjo`
    }
}

console.log(areYouPlayingBanjo(name))

【讨论】:

  • 这不会返回字符串中的名称。