0

这本身不是问题 - 更多的是一般查询。

以下(工作代码)循环遍历购物车项目表,获取为每个项目输入的价格和数量,并将结果添加到变量“ 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 吗?

4

2 回答 2

2

原因是您正在尝试将数字添加到undefined变量中,对于 JavaScript undefined + 10for ex 返回NaN,您可以尝试以下方法:

var cartTotal;
cartTotal += 10;
console.log(cartTotal);

对于两者之间的区别的一个很好的解释nullundefined看看这个答案:Why is null an object and what's the difference between null and undefined?

松散类型意味着一个变量被声明时没有它的类型,所以

var answer = 42;

是松散类型的,它只是一个包含 42 的通用框Number,当涉及到数字加法时,编译器知道如何将两者相加并给你结果。

于 2013-05-17T15:17:20.573 回答
1

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);
于 2013-05-17T15:18:43.043 回答