javascript变量初始化显示NaN

Sea*_*ean 5 javascript var initialization

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

console.log(sumArray([1,2,3,4,5]));
Run Code Online (Sandbox Code Playgroud)

大家好,

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

谢谢

Dmi*_*tin 4

当变量在当前作用域内声明时,它会用undefined值进行初始化。

var sum; // is initialized with undefined 
Run Code Online (Sandbox Code Playgroud)

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

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

请查看本文以获取有关加法运算符的更多信息(示例 7)。

当然,要解决这个问题只需将其初始化为0即可:

var sum = 0;
Run Code Online (Sandbox Code Playgroud)

另外我会把这些项目总结得更简单:

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