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