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 = sum = 0,结果是15.为什么JS不能识别数组中的值类型并为我执行初始化?为什么在第一种情况下返回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 = sum = 0,结果是15.为什么JS不能识别数组中的值类型并为我执行初始化?为什么在第一种情况下返回NaN?
感谢
当在当前范围内声明一个变量时,它将使用undefined
值进行初始化。
var sum; // is initialized with undefined
在for
循环,增加sum += numbers[i]
实际上是做一个undefined + 1
操作。因为这两个操作数不是字符串类型,它们被转换为数字:
undefined
+ 1NaN
+ 1NaN
请查看这篇文章的详细信息有关the addition operator(例如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的地方,它已经为它创造了一个价值,那么你做了什么才是增值。
不确定+什么= NaN的 – juvian
初始化'变种总和= 0 ;' – Tushar