Javascript(+)符号连接,而不是给variables的总和

为什么当我使用这个(假设i = 1

 divID = "question-" + i+1; 

我得到问题11,而不是问题2

用这个代替:

 var divID = "question-" + (i+1) 

这是一个相当普遍的问题,不仅发生在JavaScript中。 这个想法是, +可以代表连接和加法。

由于+运算符将从左到右处理,因此代码中的决策如下所示:

  • "question-" + i :由于"question-"是一个string,我们将进行连接,产生"question-1"
  • "question-1" + 1 :因为"queston-1"是一个string,我们将进行连接,产生"question-11"

"queston-" + (i+1)就不一样了:

  • 由于(i+1)在括号中,所以必须在应用第一个+之前计算它的值:
    • i是数字, 1是数字,所以我们会做加法,导致2
  • "question-" + 2 :由于"question-"是一个string,我们将进行连接,产生"question-2"

你也可以使用这个

 divID = "question-" + (i*1+1); 

确定i被转换为整数。

仅使用:

 divID = "question-" + parseInt(i) + 1; 

当“n”来自htmlinput字段或被声明为string时,您需要使用显式转换。

 var n = "1"; //type is string var frstCol = 5; lstCol = frstCol + parseInt(n); 

如果“n”是整数,则不需要转换。

 n = 1; //type is int var frstCol = 5, lstCol = frstCol + n; 

由于您将数字连接到一个string,整个事情被视为一个string。 当你想一起添加数字时,你需要单独做,并将其分配给一个变种,并使用该变种,如下所示:

 i = i + 1; divID = "question-" + i; 

或者你需要指定数字添加像这样:

 divID = "question-" + Number(i+1); 

编辑

我应该很早以前就join了这个,但是根据这些评论,这也是一样的:

 divID = "question-" + (i+1); 
 divID = "question-" + parseInt(i+1,10); 

在这里检查它 ,这是一个JSFiddle

约阿希姆·绍尔的答案将在这样的情况下工作。 但有些情况下,添加括号不会有帮助。

例如:您正在将“input元素和整数的值之和”作为parameter passing给函数。

 arg1 = $("#elemId").val(); // value is treated as string arg2 = 1; someFuntion(arg1 + arg2); // and so the values are merged here someFuntion((arg1 + arg2)); // and here 

你可以使用Number()

 arg1 = Number($("#elemId").val()); arg2 = 1; someFuntion(arg1 + arg2); 

要么

 arg1 = $("#elemId").val(); arg2 = 1; someFuntion(Number(arg1) + arg2); 
 var divID = "question-" + (parseInt(i)+1); 

使用这个+运算符performance为concat ,这就是为什么它显示11。

添加括号

 divID = "question-" + (i+1); 

在数字周围使用大括号将视为加法而不是concat。

 divID = "question-" + (i+1) 

你得到的原因是运算符的优先级的顺序,而+用于连接string以及执行数字加法的事实。

在你的情况下,“问题”的连接和i正在发生的第一个string“问题= 1”。 然后用“1”给出“question-11”的另一个string连接。

你只需要给解释者一个暗示你想要什么样的顺序。

 divID = "question-" + (i+1); 

简单,简单…如果没有在HTML中定义,每个inputtypes都被视为string。 正因为如此,加号“+”运算符是连接的。

使用parseInt(i)比将“i”的值转换为Integer。

比“+”运算符会像加法一样工作。

在你的情况下这样做: –

 divID = "question-" + parseInt(i)+1; 

如果说两个数字都是HTMLinputvariables,那么括号暗示失败的一个地方就是这样。 说a和b是variables,一个接收他们的价值如下(我不是HTML专家,但我的儿子碰到这个,没有括号的解决办法即

  • HTMLinput是variablesa和b的数字值,所以input是2和3。
  • 以下给出了string连接输出:a + b显示23; + a + b显示23; (a)+(b)显示23;
  • 从上面的build议我们尝试成功:数字(一)+数字(二)显示5; 显示parseInt(a)+ parseInt(b)5。

谢谢你的帮助只是一个FYI – 是非常混乱,我父亲大喊“这是Blogger.com的错” – 没有它是一个function的HTMLinput默认结合“加”运算符,当他们一起发生时,所有inputvariables和任何inputvariables的缺省左alignment解释都是string的解释,因此加法运算符现在作为串联运算符自然地以双/并行的方式起作用,因为正如你上面解释的那样,它是左alignmenttypes的解释协议在Java和Java脚本之后,非常有趣的事实,你们这些人提供了解决scheme,我为其他遇到这个问题的人添加了细节。