这不是一个问题,更像是一般的询问。
下面的(工作代码)循环遍历购物车商品表,获取每个商品的价格和数量,并将结果添加到变量"cartTotal
"中。
function updateCart(){
var cartTotal = 0;
jQ('#cartItems').find('tr').each(function(){
$this = jQ(this);
var price = $this.find('.itemPrice').text();
price = Number(price.replace(/[^0-9.]+/g,""));
var qty = $this.find('input').val();
var itemTotal = ( price * qty );
cartTotal += itemTotal;
});
console.log(cartTotal);
};
最初,我声明cartTotal没有给它一个0的值-我假设javascript是松散类型的,它会"知道"cartTotal是一个数字,只要数字被添加到它,因为这是我从我读过的各种帖子/文章中得到的理解。但是控制台记录NaN。
也许我对"松散类型"特性的理解有点太字面化了。有人能解释一下为什么不给它一个初始值得到NaN吗?
原因是您正在尝试向undefined
变量添加一个数字,对于JavaScript undefined + 10
for ex返回NaN
,您可以尝试以下操作:
var cartTotal;
cartTotal += 10;
console.log(cartTotal);
要了解null
和undefined
之间的区别,请查看以下答案:为什么null是一个对象,null和undefined之间的区别是什么?
松散类型意味着变量声明时没有它的类型,所以
var answer = 42;
是松散类型的,它只是一个通用的盒子容纳 Number
42,当涉及到数字加法时,编译器知道如何将两者相加并给出结果。
var cartTotal未定义,但您可以尝试使用+=来使用它。这将不起作用,因为JavaScript不知道cartTotal是什么类型,因为您没有将其设置为0。它不是强类型,因此无法知道如何将undefined转换为0。
看:示例
var cartTotal; // Undefined
var cartTotal = 0; // Defined as number
var cartTotal;
var itemTotal = 12;
alert("Cart total type: " + typeof(cartTotal)); // Causes an ex so returns NaN.
cartTotal += itemTotal;
alert(cartTotal);
var cartTotal = 0;
var itemTotal = 12;
alert("Cart total type: " + typeof(cartTotal));
cartTotal += itemTotal;
alert(cartTotal);