[英]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.