2015-10-01 2 views
0

Если я использую < = вместо <, я получу NaN, почему?Почему эта функция возвращает NAN

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

    while(count <= arguments.length){ 

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

'аргументы [число]' не определено. Добавление undefined в 0 = undefined. Если вы используете '<', функция никогда не оценивает, что находится в блоке while –

ответ

2

Когда перебирать список и использовать индекс для доступа к элементам списка (как вы делаете), вы всегда итерацию до length - 1 или < length. Причина в том, что индекс списка начинается с нуля, а не с одного. Например, в списке из 3-х предметов есть length равно 3, а индексы его позиций - 0, 1 и 2. Нет элемента с индексом 3, поэтому, если вы повторяете до length или <= length, счетчик достигнет 3 в последней итерации и попытка извлечь элемент с индексом 3 завершится с ошибкой и вернет undefined.

И, наконец, добавление undefined к сумме приведет к NaN, потому что undefined не является числом.

3

в последней итерации вашего цикла, count является arguments.length, поэтому arguments[count] === arguments[arguments.length] === undefined и sum += undefined результаты в sum === NaN

2

Кажется, что аргументы [число] не является числом (NaN). В Javascript, когда второй аргумент в выражении не является числом, первый также рассматривается как не число.

Таким образом, сумма заканчивается функцией, рассматриваемой как другой тип данных.

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

3

Пусть ваш аргумент 3 элемента:

аргументы = [0, 1, 2]

Ваш счетчик будет перебирать, как 0 => 1 => 2 => (и третий вы из границы массива, так как он имеет 3 элемента, но индексной начиная с 0.

это основы итерирования через петлю.

1

Все итерации начинаются от 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 
Смежные вопросы