我有这个代码:
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
。所以我认为它会将金额作为字符串而不是整数相加。
我该如何解决这个问题?
最佳答案
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,除了数字索引之外,这些属性也会被迭代。
避免它的另一个原因是因为此语句使用的迭代顺序是任意,并且遍历数组可能不会按数字顺序访问元素,而且它似乎更多 slower而不是简单的 for 循环。
如果迭代顺序不重要,我个人喜欢向后迭代:
var i = orders.length;
while (i--) {
//...
}
关于javascript - 奇怪的javascript添加问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416633/