【问题标题】:Getting NaN when I think I'm creating a string当我认为我正在创建一个字符串时得到 NaN
【发布时间】:2021-06-01 16:22:13
【问题描述】:

let studentScore = 90
let totalPossibleScore

let gradeMessage = function(studentScore, totalPossibleScore = 100) {
  let finalGradePercent = (studentScore / totalPossibleScore) * 100

  if (finalGradePercent >= 90) {
    let letterGrade = 'A'
    return letterGrade

  } else if (finalGradePercent >= 80) {
    let letterGrade = 'B'
    return letterGrade
  } else if (finalGradePercent >= 70) {
    let letterGrade = 'C'
    return letterGrade
  } else if (finalGradePercent >= 60) {
    let letterGrade = 'D'
    return letterGrade
  } else {
    let letterGrade = 'F'
    return letterGrade
  }
}

let studentScoreMessage = `You got a ${gradeMessage(studentScore, totalPossibleScore)} (${studentScore/totalPossibleScore}%)!`
console.log(studentScoreMessage)

回应: You got a A (NaN%)!

为什么它不给我字母等级?

【问题讨论】:

  • totalPossibleScore 是一个从未初始化的顶级变量声明。它也是函数参数的名称,但使用相同的名称会产生误导,因为它们不是同一个绑定。
  • 知道了。谢谢!过去 40 分钟一直卡在这个问题上

标签: javascript string nan


【解决方案1】:

totalPossibleScore 未初始化。试试:

let totalPossibleScore = 100

在你的函数中:

function(studentScore, totalPossibleScore = 100) {
    let finalGradePercent = (studentScore / totalPossibleScore) * 100

由于全局totalPossibleScore 默认初始化为undefined,参数totalPossibleScore = 100 会将totalPossibleScore 初始化为100,因此该函数似乎会返回正确的答案。

回到主代码,你有:

let studentScoreMessage = `You got a ${gradeMessage(studentScore, totalPossibleScore)} (${studentScore/totalPossibleScore}%)!`

在第二个表达式中我们有:

${studentScore/totalPossibleScore}

这是:

${90/undefined)

这是:

NaN

因此,您在括号中得到NaN

【讨论】:

  • “由于 NaN 大于任何整数”不,它不是,这是误导性的。 NaN 不能与任何数字相比较
  • 好的,我已经完全重写了,因为它完全错了!现在应该是正确的。
猜你喜欢
  • 2020-08-22
  • 2018-05-04
  • 2019-05-02
  • 2016-09-04
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
相关资源
最近更新 更多