Как перебирать возможные значения null в javascript без ошибок

#javascript #loops #for-loop

#javascript #циклы #for-цикл

Вопрос:

У меня на экране до 100 входных данных, каждый из которых имеет либо числовое значение, либо значение null (поскольку он еще не был загружен на экран), я хочу иметь возможность принимать значения каждого из этих входных данных и складывать их вместе, чтобы получить конечное значение.

Я попытался сделать это с помощью цикла for, перебирая их, но как только он доходит до нулевых значений, он возвращает ошибку ‘NaN’.

Первый ввод называется ‘Input1’, второй ‘Input2’ и т.д…

Мой код ниже:

     var val = 0;  //assigning the final value OUTSIDE the for loop to stop it assigning itself as 0 every loop

    for (var calc = 0; calc < 100; calc  ) //less than 100 as of 100 inputs
    {
        var inputVal = $('#Input' calc).val(); //grabbing each input on screen
        var floatVal = parseFloat(inputVal);  // converting each value to float

        var finalVal = finalValue   floatVal; //takes the val of 0, and adds each input value onto it per loop

    }

    alert(finalVal);
  

Это всегда возвращает ‘NaN’.

Если я установлю для цикла for значение ‘calc < 2’, например, и загружу 2 ввода на экран, это сработает, поэтому я предполагаю, что это потому, что другие значения равны null?

Спасибо

Комментарии:

1. значение null равно false: var floatVal = (inputVal) ? parseFloat(inputVal) : 0;

2. Поэтому просто добавьте условие перед добавлением значения. Проверьте, равно ли значение null, и если да, введите оператор continue, чтобы пропустить выполнение javascript для этого элемента цикла и перейти к следующему значению. Просто сделайте это —-> if (inputVal === undefined) continue; // поместите весь код вычисления под этим.

3. эй, @anthony, ты можешь просто добавить проверку, если ввод [calc] != null, а затем только добавить еще что-то в журнал

Ответ №1:

Вы можете использовать Number.isNaN(value) функцию для перехода к следующей итерации цикла, если значение равно NaN .

Замечено, что в вашем коде вы объявляете val , но затем никогда не используете его, вместо этого вы объявляете new finalVal в каждом цикле. Вы должны объявлять finalVal перед циклом и добавлять к нему на каждой итерации, как таковой:

 var finalVal = 0;
for (var i = 0; i < 100; i  )
{
    var inputVal = $('#Input' i).val();
    var floatVal = parseFloat(inputVal);
    if (Number.isNaN(floatVal)) 
    {
        continue;
    }
    finalVal  = floatVal;
}
alert(finalVal);
  

Комментарии:

1. К сожалению, Number.isNaN(null) равно false

2. @netizen Передаваемое значение isNaN не null соответствует. Это было бы NaN , поскольку это то, что parseFloat(null) возвращается. Попробуйте запустить Number.isNaN(parseFloat(null)) в своей консоли.

3. @netizen Что ж, вы будете удивлены, узнав, что опубликованный исходный код отлично сработал! теперь он подсчитывает все, игнорируя значения NaN.