我有这段代码:
var totalAmt=0;
for (i in orders)
{
order=orders[i];
if (order.status !='Cancelled')
totalAmt=totalAmt + order.amount;
}
但是,如果我有3个订单,金额为3,1和5,那么totalAmt
不是9,而是0315
。所以我认为它将数量一起添加为字符串而不是整数。
我该如何解决这个问题?
答案 0 :(得分:11)
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,除了数字索引之外,这些属性也将被迭代。
避免它的另一个原因是因为此语句使用的迭代顺序是任意,并且迭代数组可能无法按数字顺序访问元素,而且它似乎更多{ {3}}比简单的for循环。
如果迭代顺序不重要,我个人喜欢向后迭代:
var i = orders.length;
while (i--) {
//...
}
答案 1 :(得分:1)
使用parseFloat()
或parseInt()
函数将字符串转换为适当的类型。