JavaScript:返回NAN的函数

JavaScript:返回NAN的函数,javascript,Javascript,我正在学习codecademy.com课程,其中包含编写以下calculateTotal函数的说明。当我点击run时,它返回NaN。当我写calculateTotal函数时,有人知道它有什么问题,这使得它返回NaN。注意,我理解NaN的意思不是数字 // runner times var carlos = [9.6,10.6,11.2,10.3,11.5]; var liu = [10.6,11.2,9.4,12.3,10.1]; var timothy = [12.2,11.8,12.5,10

我正在学习codecademy.com课程,其中包含编写以下calculateTotal函数的说明。当我点击run时,它返回NaN。当我写calculateTotal函数时,有人知道它有什么问题,这使得它返回NaN。注意,我理解NaN的意思不是数字

// runner times
var carlos = [9.6,10.6,11.2,10.3,11.5];
var liu = [10.6,11.2,9.4,12.3,10.1];
var timothy = [12.2,11.8,12.5,10.9,11.1];

// declare your function calculateTotal here
var calculateTotal = function(raceTimes){
    var totalTime; 
    for(i = 0; i < raceTimes.length; i++){
        totalTime += raceTimes[i]; 
        return totalTime; 
    }
};

var liuTotal = calculateTotal(liu);

console.log(liuTotal);
//运行时间
var carlos=[9.6,10.6,11.2,10.3,11.5];
var liu=[10.6,11.2,9.4,12.3,10.1];
var timothy=[12.2,11.8,12.5,10.9,11.1];
//在此声明函数calculateTotal
var calculateTotal=函数(消旋时间){
var总时间;
对于(i=0;i
注意,许多回答这个问题的人都说var totalTime必须设置为“O”。然而,在下一个codecademy-lessson中,作者编写了一个totalTime未设置为任何值的函数,它可以工作

var calculateAverage = function (raceTimes) {
  var totalTime;
  for ( i = 0; i < raceTimes.length; i++ ) {
    totalTime = (totalTime || 0) + raceTimes[i];
  }
// assign variable averageTime
var averageTime = totalTime / raceTimes.length; 

  return averageTime;
};
var calculateAverage=函数(比赛时间){
var总时间;
对于(i=0;i
两个问题:

  • totalTime
    未定义——将某些内容添加到未定义的内容会导致
    NaN
  • 你回到你的循环中
  • 修正:

    var totalTime=0;
    对于(i=0;i
    您的
    总时间
    没有初始值,因此它以
    未定义开始。您不能将数字添加到未定义的
    中并获取数字:

    var totalTime; // implicitly initialized to undefined 
    for(i = 0; i < raceTimes.length; i++){
        totalTime += raceTimes[i];  // undefined + raceTimes[i] = NaN
        return totalTime; 
    }
    

    您尚未使用值初始化
    totalTime
    。因此它默认为未定义的
    。因此,在每次迭代中,都会添加undefined,生成
    NaN

    至少它不是一个返回a的函数。您没有将totaltime设置为零(或另一个值)来初始化它。b) 您只需在一次迭代后返回,不必将totalTime设置为零。但是,将它设置为您想要的任何数字,这样您就可以在数字中添加一个数字并获得一个数字。否则它不是一个数字。@IvanKuckir这就是我说的很好,但在下一课中,我的导师用var totalTime编写了一个函数,就像我写的那样,它工作了。这个函数为什么工作?var calculateAverage=函数(raceTimes){var totalTime;for(i=0;i(totalTime | | 0)
    在每次迭代中测试
    totalTime
    ,查看是否定义了它。如果不是,则使用零。第一次通过循环时,这将导致0而不是未定义,因此加法可以工作。
    |
    运算符是一个开关-如果第一个操作数不是falsy,则返回第一个操作数;如果是falsy,则返回第二个操作数。
    var totalTime; // implicitly initialized to undefined 
    for(i = 0; i < raceTimes.length; i++){
        totalTime += raceTimes[i];  // undefined + raceTimes[i] = NaN
        return totalTime; 
    }
    
    var totalTime = 0;