2016-03-15 150 views
2
function sumArray(numbers){ 
    var sum; 
    for(var i in numbers){ 
     sum += numbers[i]; 
    } 
    return sum; 
} 

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

大家好,JavaScript变量初始化显示的NaN

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

感谢

+0

不确定+什么= NaN的 – juvian

+1

初始化'变种总和= 0 ;' – Tushar

回答

1

当在当前范围内声明一个变量时,它将使用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; 
}); 
3

当您创建var sum;它的价值是不确定的[默认]

,所以当你不断加入到不确定你NaN [不是数]

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

然后您将数字添加到0,以便您得到正确的输出

尝试

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

如果你

console.log(0+1);那么你得到1

0

这是因为你还没有初始化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

0

背后的原因是很清楚的。当JavaScript发现任何“未定义”或“意外”错误时,则返回NaN。

在第二种情况下,你添加了sum = 0的地方,它已经为它创造了一个价值,那么你做了什么才是增值。