如果我用< =而不是<,我会得到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块中的内容 –