javascript变量初始化显示NaN
大家好 结果是NaN。但是,如果我用sum=0初始化sum,结果是15。为什么JS不识别数组中的值类型并为我进行初始化?为什么在第一种情况下返回NaNjavascript变量初始化显示NaN,javascript,initialization,var,Javascript,Initialization,Var,大家好 结果是NaN。但是,如果我用sum=0初始化sum,结果是15。为什么JS不识别数组中的值类型并为我进行初始化?为什么在第一种情况下返回NaN 当您创建var sum时,感谢您其值未定义[默认值] 因此,当您继续添加未定义的时,您会得到NaN[不是一个数字] 但是如果您初始化为var sum=0 然后将数字添加到0,以便获得正确的输出 试一试 console.log(未定义+1)你得到了NaN但是 如果你这样做 console.log(0+1)然后您得到1这是因为您尚未初始化sum。因此
当您创建var sum时,感谢您代码>其值未定义[默认值] 因此,当您继续添加未定义的时,您会得到
NaN
[不是一个数字]
但是如果您初始化为var sum=0代码>
然后将数字添加到0,以便获得正确的输出
试一试
console.log(未定义+1)代码>你得到了NaN但是
如果你这样做
console.log(0+1)代码>然后您得到1
这是因为您尚未初始化sum
。因此,sum+
将尝试添加到未定义的
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
除此之外,在第二个条件中,当您添加sum=0时,它已经对它进行了一个值,而您所做的任何操作都是对该值进行添加。当在当前范围内声明变量时,它将使用未定义的值进行初始化
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]));
在for
循环中,加法sum+=numbers[i]
实际上执行的是undefined+1
操作。由于这两个操作数都不是字符串类型,因此会将它们转换为数字:
未定义
+1
NaN
+1
NaN
请查看本文以了解更多关于(示例7)的信息
当然,要解决此问题,只需使用0初始化它:
var sum; // is initialized with undefined
此外,我还将对以下项目进行总结:
var sum = 0;
未定义+anything=NaNInitializevar和=0代码>
var sum = [1,2,3,4,5].reduce(function(sum, item) {
return sum + item;
});