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 ?
谢谢
当变量在当前作用域内声明时,它会用undefined值进行初始化。
var sum; // is initialized with undefined
Run Code Online (Sandbox Code Playgroud)
在for循环中,加法sum += numbers[i]实际上是在做一个undefined + 1运算。由于两个操作数都不是字符串类型,因此它们都转换为数字:
undefined+ 1NaN+ 1NaN请查看本文以获取有关加法运算符的更多信息(示例 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)