如果我用< =而不是<,我會得到NaN,爲什麼?爲什麼這個函數返回NAN
function addArgs(){
var sum = 0, count = 0;
while(count <= arguments.length){
sum += arguments[count];
count++;
}
return sum;
}
如果我用< =而不是<,我會得到NaN,爲什麼?爲什麼這個函數返回NAN
function addArgs(){
var sum = 0, count = 0;
while(count <= arguments.length){
sum += arguments[count];
count++;
}
return sum;
}
當你遍歷一個列表,然後使用索引來訪問列表中的項目(如你正在做的),你總是重複最多length - 1
或< length
。原因是列表索引從零開始,而不是一個。例如,有3個項目的列表,它的length
等於3,其項目的索引是0,1和2.沒有索引爲3的項目,所以如果迭代到length
或<= length
,則計數器將達到3在上次迭代中,嘗試檢索索引爲3的項目將失敗並返回undefined
。
最後,將undefined
添加到總和將導致NaN
,因爲undefined
不是數字。
,count
爲arguments.length
,因此arguments[count] === arguments[arguments.length] === undefined
和sum += undefined
導致sum === NaN
看來參數[計數]不是數字(NAN)。在JavaScript中,當表達式中的第二個參數不是數字時,第一個參數也被視爲不是數字。
因此,sum會將該函數視爲另一種數據類型。
假設你的參數是3個元素:
參數= [0,1,2]
你的計數將迭代0 => 1 => 2 => (和上3你是越界的數組,因爲它有3個元素,但進行索引從0開始
這是通過迭代循環的基礎。
所有迭代從開始(另外,在您的代碼中爲count = 0
)。所以,最大count
等於arguments.length-1
。
addArgs(2,5,8);
- >arguments[0] = 2; arguments[1] = 5; arguments[2] = 8;
除此之外,你可以使用<=
當從1
function addArgs(){
var sum = 0, count = 1;
while(count <= arguments.length){
sum += arguments[count-1];
count++;
}
return sum;
}
addArgs(2,3,4);//9
'參數
count
開始[統計]'是不確定的。將undefined添加到0 = undefined。如果使用'<',函數永遠不會評估while塊中的內容 –