Javascript, возвращающий NaN - PullRequest
       2

Javascript, возвращающий NaN

8 голосов
/ 01 сентября 2011

Я пытаюсь отображать промежуточный итог каждый раз, когда клиент вводит количество.Однако, когда я перебираю свои входные данные, я получаю 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 Ответ

23 голосов
/ 01 сентября 2011

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

Итак, я бы защитился от этого следующим образом (NaN это ложное значение ):

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

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


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

  • Всегда передавать аргумент radix в функцию parseInt;
  • Не используйте class для имен переменных: это зарезервированное (не используется, но зарезервированное) ключевое слово;
  • Не ожидайте, что промежуточный итог будет идеально точным , если вы не сделаете свои расчеты в центах.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...