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]));
背后的原因很清楚。当 JavaScript 发现任何 "undefined" 或 "unexpected" 错误时,它会 returns NaN。
在你添加 sum=0 的第二个条件的其他地方,它已经为它赋值,那么你所做的就是对该值的加法。
当在当前范围内声明变量时,它被初始化为 undefined
值。
var sum; // is initialized with undefined
在for
循环中,加法sum += numbers[i]
实际上是在做一个undefined + 1
操作。因为两个操作数都不是字符串类型,所以转为数字:
undefined
+ 1
NaN
+ 1
NaN
请查看这篇文章以获取有关 the addition operator(示例 7)的更多信息。
当然要解决这个问题只要用0初始化即可:
var sum = 0;
此外,我会更简单地总结这些项目:
var sum = [1,2,3,4,5].reduce(function(sum, item) {
return sum + item;
});
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]));
背后的原因很清楚。当 JavaScript 发现任何 "undefined" 或 "unexpected" 错误时,它会 returns NaN。
在你添加 sum=0 的第二个条件的其他地方,它已经为它赋值,那么你所做的就是对该值的加法。
当在当前范围内声明变量时,它被初始化为 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;
});