所有 JavaScript 算术运算符都有效,除了加法 (+)

All JavaScript Arithmetic Operators work except addition (+)

编辑:有几个线程被建议作为答案,但是 none 中任一线程的想法都非常有效。而且我都试过了。

非常感谢: 用户 Eazy 通过他在建议中的进一步评论解决了这个问题。事实证明,正确的做法是将整个 paresInt 数学运算放在括号中:

List += "" + list[i].team + "" + (parseInt(list[i].wins) + parseInt(list[i].ties) + parseInt(list[i].lost )) ""

原题:

所以我正在编写一个 js 代码来从数据库中打印 table。该数据库包含一个足球联赛 table,其中包含球队名称、获胜、平局和失利的比赛。当我将 table 打印到 HTML 时,我想做数学运算来计算玩过的游戏和总分,因为数据库没有提供这些信息。

最奇怪的是,如果我将 table 中的 (*) 值相乘,它就起作用了。如果我减去 (-) 或除以 (/) 数字,它就起作用了。但是,如果我尝试将数字与 + 相加,代码会将数字视为字符串,并将下一个数字写入彼此。我以前遇到过 运行 这个问题,我很困惑。解决方案可能是一个非常明显的解决方案,但我就是想不通。

如果一支球队赢了 23 场比赛,打平 7 场,输了 3 场,那么总共打了 33 场比赛。所以如果我算一下:

List += "<tr><td>" + list[i].team + "</td><td>" + 
list[i].wins + list[i].ties + list[i].lost + "</td></tr>"

它returns 2373

如果我使用不同的运算符,比如乘法:

List += "<tr><td>" + list[i].team + "</td><td>" + 
list[i].wins * list[i].ties * list[i].lost + "</td></tr>"

它 returns 483 wichs 计算正确,所以这些项目显然不是字符串。正如我所说,该代码适用于除 + 之外的所有其他运算符。这是为什么?

JavaScript 的类型非常弱。它假定所有可能是字符串的东西 都是 字符串,因此它将连接数字,因为加法是为字符串定义的。字符串没有定义乘除减法,所以编译器会先检查是否可以进行整数运算。

您可能想使用 parseInt() 函数来保证正确处理数字。

@Brandon Wyatt 告诉您的 parseInt() 的替代方法是将变量放在括号内。

const list = [
    {team: 'Team 1', wins: 5, ties: 3, lost: 2},
  {team: 'Team 2', wins: 2, ties: 3, lost: 5}
]

let content = "";
for (let i = 0; i < list.length; i++) {
    content += "<tr><td>" + list[i].team + "</td><td>" + (list[i].wins + list[i].ties + list[i].lost) + "</td></tr>";
}


document.getElementById("teams").innerHTML = content;

jsfiddle 这个解决方案: https://jsfiddle.net/j7nfqvmr/21/

我曾建议您使用 parseInt() 将返回值强制为整数。

因此您的代码可以如下所示:

List += "<tr><td>" + list[i].team + "</td><td>" + 
parseInt(list[i].wins) + parseInt(list[i].ties) + parseInt(list[i].lost) "</td></tr>"