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); });
如果字符串的第一个字符无法转换为数字,则parseFloat
和parseInt
可以返回NaN
。
所以,我会像这样保护它( NaN
是一个假值):
price = parseFloat(price) || 0; qty = parseInt(qty, 10) || 0;
对值为NaN
数字的算术运算几乎总是导致NaN
( NaN + 5
将导致NaN
。)这意味着,如果只有一个输入无法被parseFloat
或parseInt
解析,那么您当前的代码最终会为此计算NaN
小计。
它已在评论中提及(主要由Felix提及),但我认为值得强调,因为这些是重要的问题:
- 始终将
radix
参数传递给parseInt
函数; - 不要将
class
用于变量名:它是保留(未使用但保留)的关键字; - 除非你以美分计算,否则不要指望小计是完全准确的 。