当尝试= -=值时,html文本中的得分字段充当字符串
Score field in html text acts as string when trying to = -= values
我试着做一个记分牌,它奇怪地添加数字:
我的html:
<div id="game-info">
Top score: <p id="top-score">0</p><br>
Current score: <p id="current">0</p><br>
Games played: <p id="played-games">0</p>
</div>
我的javascript:
var score = document.getElementById("current");
if(blabla scored points){
score.innerHTML += 100;
}
if(blabla scored -points){
score.innerHTML -= 10;
}
负分工作得很好,至少它加起来是负的,但正分数会自己加到当前分数的末尾,像这样:
Current score: <p id="current">0100</p><br>
或
Current score: <p id="current">-20100</p><br>
这和它是字符串而不是整型有关系吗?我很困惑为什么在相同的标记下,负的分数可以工作,而正的分数不能。
您正在连接一个字符串…您需要首先将当前分数转换为数字-尝试这样做:
var score = document.getElementById("current");
if(blabla scored points){
// parse current score as integer and then add 100
score.innerHTML = parseInt(score.innerHTML,10) + 100;
}
if(blabla scored -points){
// parse current score as integer and then subtract 10
score.innerHTML = parseInt(score.innerHTML,10) - 10;
}
parseInt()
将字符串解析为整数
额外注意:当使用parseInt()
并使用基数
表示上述字符串基数的整数。始终指定此参数以消除读者混淆并保证可预测的行为。当没有指定基数时,不同的实现会产生不同的结果。
减分数比加分数效果更好的原因是+
操作符对字符串(如innerHTML
)重载,表示字符串连接,而-
操作符没有重载,对字符串没有任何特殊含义。
因此,score.innerHTML += 100
将选择重载适用于字符串的+
操作符,隐式地将100转换为字符串,并将'100'附加到当前分数字符串值后。
但是,score.innerHTML -= 10
将选择适用于数值的-
操作符的含义,因此它被迫尝试将innerHTML值强制转换为数值(它可以成功地做到这一点)并从该值中减去10,然后在将结果赋值给score.innerHTML
时将结果转换回字符串。事实上,你甚至可以在减法表达式的10后面加上引号,它仍然会工作,它只是试图把它转换回一个数字。如果分数。innerHTML恰好是一个不能转换为数字的字符串,如"abc",那么该字符串将被转换为NaN
,减法将得到NaN,当分配给innerHTML值时,NaN将被转换为字符串"NaN"。
正如这个问题的其他答案所描述的那样,使用parseInt
是强制+=
运算符的两个操作数为数字的好方法,从而确保执行加法而不是字符串连接。
innerHTML是一个字符串。您可以使用parseInt
在递增之前将其转换为整数。
是的,因为"current"的值实际上是一个字符串,所以+=只会将它认为是两个字符串的值加在一起。
在对其进行任何数学运算之前,您需要解析该值,参见下面的示例,其中包括在使用parseInt()之前检查它是否为数字:
如何在javascript中将字符串解析为int
- 如何从查询字符串中的输入字段发回文本
- 当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串
- 使用Mongoose在字段的子字符串上填充
- 使用jQuery从隐藏字段中的字符串中删除一个值
- Inout Text字段在转换为字符串并输出时生成一个空行
- 使用javascript字符串填充多个输入字段
- 将字符串返回到类型为“0”的输出字段;数字“;针对用户错误javascript
- JavaScript cookie 输入字段字符串显示错误
- JavaScript RegEx - 加载十六进制或空字符串的动态字段
- 如何让图表(饼图)在dc.js,d3和交叉过滤器(节点)中的.csv字符串字段上进行分组.js.js
- 如何将 JSON 字符串转换为带有 Javascript 中字段的对象
- 将焦点和光标设置为文本输入字段/字符串 w. Jquery 的末尾
- 在数组中存储 JQuery 字段与仅存储选择字符串相比如何
- 我有一个问题,使用 Javascript 或 Jquery 创建具有字符串计数的动态字段
- 隐藏字段值未显示在查询字符串中
- JavaScripts,AJAX,PHP:获取json字符串后无法设置字段值
- Mongodb:不能使用字符串字段名称附加到数组
- 在输入字段中使用子字符串
- 如何使用 Angular “数字”过滤器键入时在输入字段中设置带有千和小数分隔符的字符串格式
- JavaScript中的正则表达式获取以特定字符串开头的数组的所有字段