Javascript返回NaN

时间:2011-08-31 23:47:45

标签: javascript jquery parsing

每次客户输入数量时,我都会尝试显示小计。但是,当我循环输入时,我得到一个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 个答案:

答案 0 :(得分:23)

如果字符串的第一个字符无法转换为数字,则

parseFloatparseInt可以返回NaN

所以,我会像这样保护它(NaN falsy 值):

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

对值为NaN的数字进行算术运算几乎总是导致NaN NaN + 5将导致NaN。)这意味着,如果只有一<输入的/ em>无法由parseFloatparseInt解析,您当前的代码最终会计算小计的NaN


评论中已经提到过(主要是Felix),但我认为值得强调,因为这些是重要的问题:

  • 始终将radix参数传递给parseInt函数;
  • 不要将class用于变量名称:它是保留(未使用但保留)的关键字;
  • 除非您以美分计算,否则不要指望小计为perfectly accurate