Javascript возвращает NaN

Я пытаюсь отобразить промежуточный итог каждый раз, когда клиент вводит количество. Однако, когда я перебираю свои входы, я получаю NaN как итог. Я считаю, что это может быть так, как я объявляю subtotal переменная в моем скрипте, но я не сталкивался с этим раньше:

$('.item-qty input').bind('keyup', function(){

   var subtotal = 0.0;

   $('.item-qty input').each(function(){
      var class = $(this).attr('id');
      var qty = $(this).val();                     
      var price = $('.'+class).html();

      price = parseFloat(price);
      qty = parseInt(qty);
      subtotal = subtotal + (price * qty);
   });

   $('.subtotal input').val(subtotal);
});

1 ответов


parseFloat и parseInt может возвратить NaN если первый символ строки не может быть преобразована в число.

Итак, я бы защитил от этого вот так (NaN - это ложь значение):

price = parseFloat(price) || 0;
qty = parseInt(qty, 10) || 0;

арифметические операции над числами со значением NaN почти всегда NaN (NaN + 5 в результате NaN.) Это значит, если только один вход не может быть проанализирован parseFloat или parseInt ваш текущий код будет в конечном итоге расчета NaN для промежуточных итогов.


это уже упоминалось в комментариях (by Феликс в основном), но я думаю, что это стоит внимания, поскольку это важные проблемы:

  • всегда передают до