JavaScript 变量初始化显示 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 初始化总和,则结果为 15。为什么JS无法识别数组中的值类型并为我进行初始化?为什么在第一种情况下返回 NaN

谢谢

当变量在当前范围内声明时,将使用undefined值对其进行初始化。

var sum; // is initialized with undefined 

for循环中,加法sum += numbers[i]实际上是在执行undefined + 1操作。由于这两个操作数都不是字符串类型,因此它们将转换为数字:

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

请查看本文,了解有关加法运算符的详细信息(示例 7)。

当然,要解决此问题,只需将其初始化为0:

var sum = 0;

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

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

当你创建var sum;它的值是未定义的[默认]

所以当你不断添加到未定义时,你会得到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]));

斯菲德尔

背后的原因非常清楚。当 JavaScript 发现任何"未定义"或"意外"错误时,它会返回 NaN。

在您的第二个条件中,您添加了 sum=0 的其他地方,它已经产生了一个值,然后您所做的就是对该值的加法。

最新更新