javascript - 奇怪的javascript添加问题

标签 javascript

我有这个代码:

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/

相关文章:

JavaScript 引用错误 : Invalid left-hand side in assignment

javascript - 如何在 React 上设置具有撤消操作的初始状态?

javascript - 使用 Spotify Web API 播放轨道

javascript - Javascript API 可以与 Google Spreadsheet 建立多少个 I/O 连接?

javascript - 冲突的 jQuery 脚本(NoConflict 修复了一个脚本但破坏了其他脚本)

javascript - $(someelement).text().length 和计数字符编码?

javascript - 如何获取/查找从 javascript 或 jquery 中的 DOM 元素或变量调用的函数

javascript - Handlebars 4.0.2 应包含哪些源文件?

javascript - 当用户点击一个元素时,触发对另一个元素的点击。

JavaScript 死锁