2017-02-28 23 views
5

在第四章的Eloquent Javascript中獲得一個意外的NaN,但這個錯誤對我來說並不明顯。有人會介意看看並指出我的錯誤嗎?typeof var後的意外NaN輸出顯示預期的數字類型

/* 
Write a range function that takes two arguments, start and end, and returns an array containing all the numbers from start up to (and including) end. 
*/ 
var numRng = []; 
function range(start, end) { 
    //var numRng = []; 
    cntr = (end - start); 
    for (i = 0; i <= cntr; i++) { 
    numRng.push(start); 
    start++; 
    } // end FOR 
    //return numRng; 
} // end FUNC range 

range(1, 10); 
/*for (i = 0; i < numRng.length; i++) { 
    console.log('Array element ' + numRng.indexOf(1 + i) + ' contains range value: ' + numRng[i]); 
}*/ 

/* 
Next, write a sum function that takes an array of numbers and returns the sum of these numbers. Run the previous program and see whether it does indeed return 55. 
*/ 
var total = 0; 
function sum(numRng) { 
    //var total = 0; 
    for (i = 0; i <= numRng.length; i++) { 
    //console.log(total); 
    total += numRng[i]; 
    //console.log(total);  
    } // end FOR 
    console.log(typeof total); 
    console.log(total);  
} // end FUNC range 

sum(numRng); 
console.log('Total sum of all element values held by array numRng is: ' + total); 

這裏是Firebug的輸出,顯示該typeof totalfunc總和for環後確實number但隨後作爲NaN輸出。

var numRng = []; // seem to require global var ...nt values held by array numRng is: ' + total); 
number 
NaN 
Total sum of all element values held by array numRng is: NaN 

任何幫助表示讚賞。

+2

'typeof(NaN)'是「數字」。檢查'numRng'的值 – scrappedcola

回答

6

的問題是在這裏

for (i = 0; i <= numRng.length; i++) 
       ^

numRng[numRng.length] =>未定義
我糾正下面

var numRng = []; 
 
function range(start, end) { 
 
    //var numRng = []; 
 
    cntr = (end - start); 
 
    for (i = 0; i <= cntr; i++) { 
 
    numRng.push(start); 
 
    start++; 
 
    } 
 
} 
 

 
range(1, 10); 
 

 

 
var total = 0; 
 
function sum(numRng) { 
 
    for (i = 0; i < numRng.length; i++) { 
 
    total += numRng[i]; 
 
    } 
 
    console.log(typeof total); 
 
    console.log(total);  
 
} 
 
sum(numRng); 
 
console.log('Total sum of all element values held by array numRng is: ' + total);

+3

嗯,我現在看到問題了:從0開始的數組循環中的<<=結束於'array.length - 1'。所以有一個未定義的數組元素循環,導致'總數'去我猜。感謝名單。 – scriptz

+3

沒錯。你可以使用'<= array.length-1'或'

3

這裏唯一的錯誤是,你必須

代碼
for (i = 0; i <= numRng.length; i++) 

for (i = 0; i < numRng.length; i++) 

陣列的長度的最後一個索引+ 1;所以當在循環的最後一次迭代中使用< =時,numRng [i]將是未定義的,並且向未定義的數字添加NaN。