javascript 变量初始化显示 NaN

javascript variable initialization shows NaN

function sumArray(numbers){
  var sum;
  for(var i in numbers){
      sum += numbers[i];
  }
  return sum;
}

console.log(sumArray([1,2,3,4,5]));

大家好,

结果是 NaN。但是,如果我用sum = 0初始化sum,结果是15。为什么JS不识别数组中的值类型并为我初始化?为什么在第一种情况下 return NaN?

谢谢

当您创建 var sum; 时,它的值未定义 [默认]

所以当你继续添加到 undefined 你得到 NaN [不是数字]

但是如果你初始化为var sum=0;

然后您将数字与 0 相加,以便获得正确的输出

尝试

console.log(undefined+1); 你得到 NaN 但

如果你这样做

console.log(0+1); 然后你得到 1

这是因为您还没有初始化sum。所以 sum+ 将尝试添加到 undefined.

    function sumArray(numbers){
      var sum=0;      // sum="" if you want output as 12345
      for(var i in numbers){
          sum += numbers[i];
      }
      return sum;
    }

console.log(sumArray([1,2,3,4,5]));

jsfiddle

背后的原因很清楚。当 JavaScript 发现任何 "undefined" 或 "unexpected" 错误时,它会 returns NaN。

在你添加 sum=0 的第二个条件的其他地方,它已经为它赋值,那么你所做的就是对该值的加法。

当在当前范围内声明变量时,它被初始化为 undefined 值。

var sum; // is initialized with undefined 

for循环中,加法sum += numbers[i]实际上是在做一个undefined + 1操作。因为两个操作数都不是字符串类型,所以转为数字:

  1. undefined + 1
  2. NaN + 1
  3. NaN

请查看这篇文章以获取有关 the addition operator(示例 7)的更多信息。

当然要解决这个问题只要用0初始化即可:

var sum = 0;

此外,我会更简单地总结这些项目:

var sum = [1,2,3,4,5].reduce(function(sum, item) { 
  return sum + item; 
});