Javascript(+)符号连接而不是给出变量的总和

时间:2011-05-11 07:57:21

标签: javascript math

为什么我使用它:(假设i = 1

divID = "question-" + i+1;

问题-11 而非问题-2

14 个答案:

答案 0 :(得分:70)

请改用:

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

这是一个相当普遍的问题,并不仅仅发生在JavaScript中。我们的想法是+可以表示两者连接和添加。

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

  • "question-" + i:由于"question-"是一个字符串,我们会进行连接,从而生成"question-1"
  • "question-1" + 1:由于"queston-1"是一个字符串,我们会进行连接,从而生成"question-11"

"question-" + (i+1)(i+1)不同:

  • 由于+在括号中,因此必须在应用第一个i之前计算其值:
    • 1是数字,2是数字,因此我们会添加,导致"question-" + 2
  • "question-":由于"question-2"是一个字符串,我们会进行连接,从而生成{{1}}。

答案 1 :(得分:34)

您也可以使用此

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

确保将i转换为整数。

答案 2 :(得分:18)

仅限使用:

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

当“n”来自html输入字段或声明为字符串时,您需要使用显式转换。

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;

答案 3 :(得分:8)

由于您将数字连接到字符串,因此将整个事物视为字符串。如果要将数字一起添加,则需要单独执行此操作并将其分配给var并使用该var,如下所示:

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

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

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

修改

我应该在很久以前添加这个,但根据评论,这也有效:

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

答案 4 :(得分:4)

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

check it here,这是一个JSFiddle

答案 5 :(得分:1)

Joachim Sauer's answer可以在这样的场景中使用。但在某些情况下,添加括号无济于事。

例如:您将'输入元素的值和整数'作为参数传递给函数。

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);

答案 6 :(得分:0)

添加括号

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

答案 7 :(得分:0)

使用数字周围的大括号将视为加法而非concat。

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

答案 8 :(得分:0)

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

在您的情况下,“question-”和i的串联首先发出字符串“question = 1”。然后另一个字符串连接“1”给出“问题11”。

您只需要向口译员提供一份关于您想要的预备顺序的提示。

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

答案 9 :(得分:0)

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

使用此+运算符表现为concat,这就是显示11的原因。

答案 10 :(得分:0)

另一个替代方法可能是:

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

减去负数与添加负数相同,并且减号不能用于串联

答案 11 :(得分:0)

必须注意i是变量的整数类型。在javaScript中,我们没有在变量声明期间指定数据类型,但是我们的初始化可以保证我们的变量具有特定的数据类型。

初始化声明变量是一个好习惯:

  • 对于整数,var num = 0;
  • 对于字符串,var str = "";

即使您的i变量是整数,+运算符也可以执行串联操作而不是加法操作。

在您遇到问题的情况下,您假设i = 1除了2之外还想获得1,请尝试使用(i-1+2)。无需使用()括号。

-(减号)不能被误解,您也不会得到意外的结果。

答案 12 :(得分:-1)

简单易用...如果未在HTML中定义,则每种输入类型都被视为字符串。因此,Plus“+”运算符是连接的。

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

比“+”运算符更像是添加。

在你的情况下这样做: -

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

答案 13 :(得分:-2)

括号建议失败的一个地方是两个数字都是HTML输入变量。 说a和b是变量,一个接收它们的值如下(我不是HTML专家,但是我的儿子遇到了这个并且没有括号解决方案,即

  • HTML输入是变量a和b的数值,因此输入为2和3。
  • 以下给出字符串连接输出:a + b显示23; + a + b显示23; (a)+(b)显示23;
  • 从上面的建议我们尝试成功:数字(a)+数字(b)显示5; parseInt(a)+ parseInt(b)显示5。

感谢FYI提供的帮助 - 非常令人困惑,我爸爸对'这是Blogger.com的错误'大吼大叫“ - 这不是HTML输入默认与'添加'操作符相结合的特征,当它们发生时同时,对所有输入变量和任何输入变量的默认左对齐解释是字符串的解释,因此加法运算符现在以其双重/并行角色自然地作为连接运算符运行,因为正如您在上面解释的那样,它是左对齐类型其后是Java和Java脚本中的解释协议。非常有趣的事实。你们提供了解决方案,我为其他人添加了详细信息。