Если я использую < = вместо <, я получу 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, когда второй аргумент в выражении не является числом, первый также рассматривается как не число.
Таким образом, сумма заканчивается функцией, рассматриваемой как другой тип данных.
Пусть ваш аргумент 3 элемента:
аргументы = [0, 1, 2]
Ваш счетчик будет перебирать, как 0 => 1 => 2 => (и третий вы из границы массива, так как он имеет 3 элемента, но индексной начиная с 0.
это основы итерирования через петлю.
Все итерации начинаются от 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
'аргументы [число]' не определено. Добавление undefined в 0 = undefined. Если вы используете '<', функция никогда не оценивает, что находится в блоке while –