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,我为其他遇到这个问题的人添加了细节。