如果我使用< =而不是<,我会得到NaN,为什么?
function addArgs(){
var sum = 0, count = 0;
while(count <= arguments.length){
sum += arguments[count];
count++;
}
return sum;
}
答案 0 :(得分:3)
在循环的最后一次迭代中,count
为arguments.length
,因此arguments[count] === arguments[arguments.length] === undefined
和sum += undefined
会产生sum === NaN
答案 1 :(得分:3)
假设你的论证是3个元素:
参数= [0,1,2]
您的计数将迭代为0 =&gt; 1 =&gt; 2 =&gt; 3 (并且在3日你超出了数组的范围,因为它有3个元素,但是从0开始编入索引。
这是迭代循环的基础。
答案 2 :(得分:2)
似乎参数[count]不是数字(NaN)。在Javascript中,当表达式中的第二个参数不是数字时,第一个参数也被视为不是数字。
因此,sum结束了被视为另一种数据类型的函数。
答案 3 :(得分:2)
当您遍历列表并使用索引访问列表中的项目时(就像您正在做的那样),您总是迭代到length - 1
或< length
。原因是列表索引从零开始,而不是一个。例如,一个包含3个项目的列表,其length
等于3,其项目的索引为0,1和2.没有索引为3的项目,因此如果迭代到{ {1}}或length
,计数器在最后一次迭代中将达到3,尝试检索索引为3的项目将失败并返回<= length
。
最后,将undefined
添加到总和中会产生undefined
,因为NaN
不是数字。
答案 4 :(得分:1)
所有迭代都从0
开始(同样,代码中为count = 0
)。因此,最高count
等于arguments.length-1
。
addArgs(2,5,8);
- &gt; arguments[0] = 2; arguments[1] = 5; arguments[2] = 8;
除此之外,当<=
从count
开始时,您可以使用1
function addArgs(){
var sum = 0, count = 1;
while(count <= arguments.length){
sum += arguments[count-1];
count++;
}
return sum;
}
addArgs(2,3,4);//9