为什么这个函数返回NAN ?
Why does this function return NAN
如果我使用<=而不是<,我将得到NaN,为什么?
function addArgs(){
var sum = 0, count = 0;
while(count <= arguments.length){
sum += arguments[count];
count++;
}
return sum;
}
在循环的最后一次迭代中,count
为arguments.length
,因此为arguments[count] === arguments[arguments.length] === undefined
, sum += undefined
为sum === NaN
假设你的参数是3个元素:
arguments = [0,1, 2]
你的计数将迭代为0 => 1 => 2 => 3(并且在第3次你超出了数组的边界,因为它有3个元素,但从0开始索引。
当您遍历列表并使用索引访问列表中的项时(就像您正在做的那样),您总是迭代到length - 1
或< length
。原因是列表索引从0开始,而不是1。例如,一个包含3个项目的列表,其length
等于3,其项目的索引为0、1和2。没有索引为3的项,所以如果迭代到length
或<= length
,计数器将在最后一次迭代中达到3,并且尝试检索索引为3的项将失败并返回undefined
。
最后,由于undefined
不是数字,将undefined
加到总和中将得到NaN
。
似乎arguments[count]不是一个数字(NaN)。在Javascript中,当表达式中的第二个参数不是数字时,第一个参数也被视为不是数字。
因此,sum函数最终被视为另一种数据类型。
http://www.w3schools.com/js/js_datatypes.asp所有的迭代都从0
开始(同样,在您的代码中也是count = 0
)。所以,max count
= arguments.length-1
addArgs(2,5,8);
-> 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
- 如何防止Math.max()返回NaN
- 尝试求和时,在我的表的页脚中返回$NaN
- 为什么Math.pow(1,无穷大)返回NaN
- JavaScript:返回NaN(第2部分)
- 为什么这个代码返回NaN
- Protractor-分配给element.all.locator.count的变量返回NaN why
- javascript 在求和时返回 NaN
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 返回“[对象对象] NaN” - Javascript
- 返回为 NaN 的值
- 计算地理位置距离返回 NaN
- Javascript函数返回'NaN'或者'未定义'
- nan在C++中是什么意思?为什么pow(-4,-2.1)返回-nan
- 货币字段上的 parseInt 返回 NaN
- Javascript:解析csv中的字符串返回NaN(不是数字)
- JS脚本返回NaN
- 我如何才能得到返回'0'而不是NaN
- 解析html td返回NaN
- Javascript函数返回NaN
- 为什么angular.isNumber(NaN)返回true ?