为什么这个函数返回NAN

时间:2015-10-01 22:03:29

标签: javascript

如果我使用< =而不是<,我会得到NaN,为什么?

function addArgs(){
    var sum = 0, count = 0;

    while(count <= arguments.length){

         sum += arguments[count];
         count++;
    }
    return sum;
}

5 个答案:

答案 0 :(得分:3)

在循环的最后一次迭代中,countarguments.length,因此arguments[count] === arguments[arguments.length] === undefinedsum += 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结束了被视为另一种数据类型的函数。

http://www.w3schools.com/js/js_datatypes.asp

答案 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