2016-03-15 156 views
2
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

結果是NaN的。但是,如果我初始化sum = sum = 0,結果是15.爲什麼JS不能識別數組中的值類型併爲我執行初始化?爲什麼在第一種情況下返回NaN

感謝

+0

不確定+什麼= NaN的 – juvian

+1

初始化'變種總和= 0 ;' – Tushar

回答

1

當在當前範圍內聲明一個變量時,它將使用undefined值進行初始化。

var sum; // is initialized with undefined 

for循環,增加sum += numbers[i]實際上是做一個undefined + 1操作。因爲這兩個操作數不是字符串類型,它們被轉換爲數字:

  1. undefined + 1
  2. NaN + 1
  3. NaN

請查看這篇文章的詳細信息有關the addition operator(例如7)。

當然,要解決這個問題,只是0初始化:

var sum = 0; 

另外我想總結的項目簡單:

var sum = [1,2,3,4,5].reduce(function(sum, item) { 
    return sum + item; 
}); 
3

當您創建var sum;它的價值是不確定的[默認]

,所以當你不斷加入到不確定你NaN [不是數]

但如果你初始化爲var sum=0;

然後您將數字添加到0,以便您得到正確的輸出

嘗試

console.log(undefined+1);你的NaN但

如果你

console.log(0+1);那麼你得到1

0

這是因爲你還沒有初始化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])); 

jsfiddle

0

背後的原因是很清楚的。當JavaScript發現任何「未定義」或「意外」錯誤時,則返回NaN。

在第二種情況下,你添加了sum = 0的地方,它已經爲它創造了一個價值,那麼你做了什麼纔是增值。