我需要用javascript将5加到一个整数变量中,但是相反,它将变量视为一个字符串,因此它写出了该变量,然后将5加到“字符串”的末尾。

var dots = document.getElementById("txt").value; // 5
function increase(){
    dots = dots + 5;
}


输出:55

如何强制它输出10

评论

此特定示例输出10。

可能重复的Javascript错误地将两个数字相加;看到我对这个问题的回答

您给希望通过转储所有代码而没有进行任何尝试的人提供帮助的人造成了不适当的负担。自己进行测试... #control的CSS属性对您的问题有影响吗?如果不是,请删除它们,不要向我们显示。继续减少代码,直到您拥有重现问题所需的绝对最低限度的测试用例为止。大多数情况下,这样做会导致您发现问题并在此过程中学习。如果您自己不能解决问题,那么您很可能会通过简单的示例获得快速帮助。

#1 楼

您的文件中有

dots = document.getElementById("txt").value;


这行,这将点设置为字符串,因为txt的内容不限于数字。

将其转换为int,将行更改为:

dots = parseInt(document.getElementById("txt").value, 10);


注意:此处的10指定十进制(以10为底)。否则,某些浏览器可能无法正确解释该字符串。请参阅MDN:parseInt

评论


快捷方式...点= + document.getElementById(“ txt”)。value

–Tracker1
2011-1-30在8:45

parseInt(...,10)也请始终使用基数...进行健全性检查...如果(!dots ||点<1)可能也正确...

–Tracker1
2011-1-30在8:47

最好对增量使用增量运算符。像VARIABLE ++而不是VAR = VAR + 1;

– gnganapath
2014年12月2日在6:43



#2 楼

最简单:

dots = dots*1+5;


点将转换为数字。

评论


比这更简单的是点= +点+5。

– Andy E
2011年9月15日下午16:44

#3 楼

不要忘记-如果要处理小数,请使用parseFloat();

评论


并且不要忘了float不是十进制数据类型stackoverflow.com/questions/588004/…

–泰德·汉森(Tedd Hansen)
2014年11月20日14:04

只需使用数字。

–user4642212
18年6月25日在6:59

#4 楼

我添加此答案的原因是我在这里看不到它。

一种方法是在值前面加上'+'字符

示例:

var x = +'11.5' + +'3.5'


x === 15

我发现这是最简单的方法

在这种情况下,行:

dots = document.getElementById("txt").value;


可以更改为

dots = +(document.getElementById("txt").value);


以将其强制为数字

注意:

+'' === 0
+[] === 0
+[5] === 5
+['5'] === 5


#5 楼

parseInt()应该可以解决问题

var number = "25";
var sum = parseInt(number, 10) + 10;
var pin = number + 10;


给你

sum == 35
pin == "2510"


http://www.w3schools.com /jsref/jsref_parseint.asp

注意:10中的parseInt(number, 10)指定十进制(以10为底)。否则,某些浏览器可能无法正确解释该字符串。请参阅MDN:parseInt

#6 楼

这也适用于您:

dots -= -5;


评论


太好了,我们不必重写第一个变量

– Bormat
17年1月19日在14:21

#7 楼

它真的很简单

var total = (1 * yourFirstVariablehere) + (1 * yourSecondVariablehere)


这会强制javascript进行乘法运算,因为*无需在javascript上混淆。

#8 楼

您可以在变量后面添加+,它将强制其为整数

var dots = 5
    function increase(){
        dots = +dots + 5;
    }


#9 楼

在针对我的特定情况尝试了大多数答案但没有成功之后,我想到了以下方法:

dots = -(-dots - 5);


+符号是使js感到困惑的地方,这完全消除了它们。易于理解,可能会造成混淆。

#10 楼

Number()
 dots = document.getElementById("txt").value;
dots = Number(dots) + 5;

 


 // from MDN
Number('123')     // 123
Number('123') === 123 /// true
Number('12.3')    // 12.3
Number('12.00')   // 12
Number('123e-1')  // 12.3
Number('')        // 0
Number(null)      // 0
Number('0x11')    // 17
Number('0b11')    // 3
Number('0o11')    // 9
Number('foo')     // NaN
Number('100a')    // NaN
Number('-Infinity') //-Infinity
 


#11 楼

自上次投票以来已更新。...

我之前只看到了

var dots = 5
function increase(){
    dots = dots+5;
}


这部分,但后来向我展示了txt框输入变量dots。因此,您需要确保“清理”输入,以确保输入仅包含整数,而不包含恶意代码。

一种简单的方法是使用一个onkeyup()事件以确保它具有数字字符:

<input size="40" id="txt" value="Write a character here!" onkeyup="GetChar (event);"/>


该事件将给出错误并如果值不是数字则清除最后一个字符:

<script type="text/javascript">
    function GetChar (event){
        var keyCode = ('which' in event) ? event.which : event.keyCode;
        var yourChar = String.fromCharCode();
        if (yourChar != "0" &&
            yourChar != "1" &&
            yourChar != "2" &&
            yourChar != "3" && 
            yourChar != "4" &&
            yourChar != "5" &&
            yourChar != "6" && 
            yourChar != "7" &&
            yourChar != "8" && 
            yourChar != "9")
        {
            alert ('The character was not a number');
            var source = event.target || event.srcElement;
            source.value = source.value.substring(0,source.value-2);
        }
    }
</script>


显然您也可以使用正则表达式,但是我走了一条懒惰的路。

从那时起,您就会知道只有数字可以在框中,您应该可以只使用eval()

dots = eval(dots) + 5;


评论


如果点来自用户输入,特别是如果它来自存储的输入,则eval()很危险。更多信息

–乍得·利维(Chad Levy)
16年6月13日在20:15

@ChadLevy感谢您的链接-很好的阅读-并提出了这个问题,但是在这种情况下,这种担心是不必要的,因为它不是来自用户输入的。点是一个已定义的变量,该变量正在递增并且只是被误认为是字符串。因此,我同意我的回答,那就是不要轻易从用户/存储的输入中轻而易举地使用它,就像您所说的那样,它可能会注入恶意脚本。但在这种情况下,无论如何,这种注入仍然会导致数学错误/异常,因此,无论哪种方式,它实际上都不会做任何事情。

–vapcguy
16年6月14日14:06



对于那些因为认为eval()如此危险而拒绝的人,您需要在OP使用的上下文中查看代码。在这种情况下,这不是因为他使用的输入不是来自文本框,也不是来自任何其他形式的用户输入,在这些输入中,可能会有任何形式的非数字值注入!希望我能投票赞成你的赞成票!

–vapcguy
16/09/12在15:12



另一个下注者。想要说明自己,而不是仅仅作为绵羊吗?有时候eval()很好,您需要查看使用它的上下文,而不是一味地认为您阅读的所有内容实际上并没有理解!

–vapcguy
16-10-11在16:22

@ChadLevy好吧,就这个数字而言,您是对的。我没有看那部分-我只关注他放在页面顶部的内容:代码var dots = 5 function gain(){dots = points + 5; }不使用文本字段,而是使用直接变量(而不是来自用户输入)进行分配。这就是我的出发点。但是我看到你说的对,他正在将文本字段txt分配给点,而点是全局变量,因此该输入会对其进行更新。你是对的。谢谢。

–vapcguy
16-10-11在18:42