繁体   English   中英

奇怪的JavaScript加法问题

[英]Strange javascript addition problem

我有以下代码:

var totalAmt=0;
for (i in orders)
{
   order=orders[i];
   if (order.status !='Cancelled')
        totalAmt=totalAmt + order.amount;
}

但是,如果我有3个订单,金额分别为totalAmt ,那么我的totalAmt为9,而不是0315 因此,我认为将金额作为字符串而不是整数加在一起。

我该如何解决?

order.amount是一个字符串,并且如果+运算符的操作数之一是一个字符串,则会进行级联而不是求和。

您应该将其转换为数字,例如使用一元加号运算符:

var totalAmt = 0, i, order; // declaring the loop variables
for (var i in orders) {
   order = orders[i];
   if (order.status !='Cancelled')
        totalAmt += +order.amount; // unary plus to convert to number
}

您也可以使用:

totalAmt = totalAmt + (+order.amount);
totalAmt = totalAmt + Number(order.amount);
totalAmt = totalAmt + parseFloat(order.amount);
// etc...

另外,您还使用for..in循环遍历orders ,如果orders是数组,则应使用常规的for循环:

for (var i = 0; i<orders.length; i++) {
  //...
}

那是因为for ... in语句旨在用于遍历对象属性 ,对于数组,它可能很想使用它,因为它似乎可行,但是不建议使用,因为它将遍历对象属性 ,并且如果扩展了Array.prototype,则除了数字索引之外,还将迭代这些属性。

避免出现这种情况的另一个原因是,该语句使用的迭代顺序是任意的 ,并且在数组上进行迭代可能不会按数字顺序访问元素,而且似乎比简单的for循环要得多。

如果迭代顺序不重要,则我个人喜欢向后迭代:

var i = orders.length;
while (i--) {
   //...
}

使用parseFloat()parseInt()函数将字符串转换为适当的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM