Javascript 如何强迫JS做数学运算,而不是把两个字符串放在一起

Javascript 如何强迫JS做数学运算,而不是把两个字符串放在一起,javascript,string,math,addition,Javascript,String,Math,Addition,我需要javascript将5添加到整数变量中,但它将变量视为字符串,因此它写出变量,然后将5添加到“字符串”的末尾。我怎么能强迫它做数学呢 var dots = document.getElementById("txt").value; // 5 function increase(){ dots = dots + 5; } 输出:55 我如何强制它输出10?你有这条线吗 dots = document.getElementById("txt").value; 在您的文件中,这会将

我需要javascript将5添加到整数变量中,但它将变量视为字符串,因此它写出变量,然后将5添加到“字符串”的末尾。我怎么能强迫它做数学呢

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

我如何强制它输出
10

你有这条线吗

dots = document.getElementById("txt").value;
在您的文件中,这会将点设置为字符串,因为txt的内容不限于数字

要将其转换为整数,请将行更改为:

dots = parseInt(document.getElementById("txt").value, 10);
注:此处的
10
指定十进制(以10为基数)。如果没有此选项,某些浏览器可能无法正确解释字符串。请参阅MDN:。

最简单的:

dots = dots*1+5;

点将被转换为数字。

别忘了-使用
parseFloat()如果你处理的是小数。

parseInt()

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

sum == 35
pin == "2510"


注意:
parseInt(数字,10)
中的
10
指定十进制(以10为基数)。如果没有此选项,某些浏览器可能无法正确解释字符串。请参阅MDN:。

自上次否决后更新的

我只看到了那一部分

var dots = 5
function increase(){
    dots = dots+5;
}
之前,但后来我看到,
txt
框为变量
。因此,您需要确保“清理”输入,确保它只有整数,而不是恶意代码

一种简单的方法是使用
onkeyup()
事件解析文本框,以确保它包含数字字符:

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

这也适用于您:

dots -= -5;

我添加这个答案是因为我在这里看不到它

一种方法是在值前面放一个“+”字符

例如:

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

我发现这是最简单的方法

在这种情况下,行:

dots = document.getElementById("txt").value;
可以改成

dots = +(document.getElementById("txt").value);
将其强制为一个数字

注:

+'' === 0
+[] === 0
+[5] === 5
+['5'] === 5
这真的很简单

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

这将强制javascript成倍增加,因为*登录javascript没有混淆。

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

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

在针对我的具体案例尝试了这里的大多数答案后,我得出了以下结论:

dots = -(-dots - 5);
+符号使js感到困惑,这就完全消除了它们。易于实现,如果可能让人难以理解。

dots=document.getElementById(“txt”).value;
点=数量(点)+5;
//来自MDN
编号('123')//123
数字('123')==123///true
编号('12.3')//12.3
编号('12.00')//12
编号('123e-1')//12.3
编号(“”)//0
数字(空)//0
编号('0x11')//17
编号('0b11')//3
编号('0o11')//9
编号('foo')//NaN
编号('100a')//NaN
数字('-无限')/-无限

此特定示例输出10.5个可能重复的;请注意,您在不进行任何删减的情况下转储了所有代码,给那些想要帮助您的人带来了不应有的负担。您自己测试一下。
#control
的CSS属性对您的问题有什么影响吗?如果没有,则删除它们,不向我们显示它们。继续减少代码,直到获得重现问题所需的绝对最小测试用例。大多数情况下,这样做会让你发现问题并在过程中学习。如果你自己不解决这个问题,那么你很可能会通过简单的例子得到快速的帮助。。。dots=+document.getElementById(“txt”).valueparseInt(…,10)此外,始终使用基数。。。精神检查。。。如果(!dots | | dots<1)也可能是有序的…最好使用增量运算符进行加法。喜欢变量+,而不是VAR=VAR+1;函数add(){var a=prompt('Enter 1st number');var b=prompt('Enter 2nd number');var c=a+b;console.log('reuslt is'+c);}add();例如,var a=5;var b=9;然后打印59而不是14;我无法理解这里出了什么问题。@AnkurRohilla
a
b
是字符串,您需要它们作为数字,以便对它们进行数学运算。这是由
var c=parseInt(a,10)+parseInt(b,10)
完成的,甚至比
dots=+dots+5
更简单。不要忘记,float不是十进制数据类型。如果
dots
是用户输入,尤其是存储输入,使用
Number
eval()
是危险的@ChadLevy感谢你的链接——一个很好的阅读——并提出了这一点,但在这种情况下,这种担心是没有根据的,因为它不是来自用户输入
dots
是一个已定义的变量,它正在递增,只是被误认为是字符串。因此,我将限定我的答案,即它不应该像您所说的那样,从用户/存储的输入中轻易使用,因为这些输入可能会产生邪恶的脚本注入。但在这种情况下,这种注入也会导致一个数学错误/异常,无论如何,它都不会做任何事情。对于那些因为您认为
eval()
非常危险而进行向下投票的人,您需要在OP使用的上下文中查看代码。在这种情况下,这不是因为他使用的输入不是来自文本框或任何其他形式的用户输入,在这些输入中可能存在任何形式的非数值注入!我希望我能投你的反对票!另一位选民。你愿意解释一下你自己,而不仅仅是一只羊吗?有时候
eval()
很好,你需要看看它的使用环境,而不是盲目地相信你所读的东西而不真正理解它@ChadLevy好吧,在这方面,你是对的。我没有看那一节——我的重点是他在页面顶部放的内容:代码
var dots=5函数increase(){dots=dots+5;}
不使用文本字段,而是使用直接变量赋值,而不是用户输入。所以这就是我离开的原因。但我发现你是对的,他将文本字段
txt
分配给
,并且
var dots = 5
    function increase(){
        dots = +dots + 5;
    }
dots = -(-dots - 5);