Javascript 返回 NaN

标签 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);
});

最佳答案

parseFloatparseInt如果字符串的第一个字符不能转换为数字,可以返回 NaN

所以,我会像这样防止它(NaN 是一个 falsy 值):

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

对值为 NaN 的数字进行算术运算几乎总是得到 NaN(NaN + 5 将得到 NaN。)这意味着,如果只有 一个 输入不能被 parseFloatparseInt 解析,您当前的代码最终将计算 NaN 为小计。


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

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

关于Javascript 返回 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264752/

相关文章:

javascript - D3.js exit().remove() 不会删除数据/行

javascript - 链接到 HTML 文档中的 href 时如何使用 javascript 偏移量?

php - 如何在 Chrome 上调试 JavaScript

javascript - 在 td 元素后附加 TD('s)

Java 更改和移动非标准的 XML 文件

javascript - jQuery 日期选择器日计数

javascript - Express.js "app.use() requires middleware function"

javascript - 路由变更时的认证

c - 在 Bison 中对 n < 0 使用 $n

c++ - 接收 HTTP header