为什么我使用它:(假设i = 1
)
divID = "question-" + i+1;
我问题-11 而非问题-2 ?
答案 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专家,但是我的儿子遇到了这个并且没有括号解决方案,即
感谢FYI提供的帮助 - 非常令人困惑,我爸爸对'这是Blogger.com的错误'大吼大叫“ - 这不是HTML输入默认与'添加'操作符相结合的特征,当它们发生时同时,对所有输入变量和任何输入变量的默认左对齐解释是字符串的解释,因此加法运算符现在以其双重/并行角色自然地作为连接运算符运行,因为正如您在上面解释的那样,它是左对齐类型其后是Java和Java脚本中的解释协议。非常有趣的事实。你们提供了解决方案,我为其他人添加了详细信息。