var str;
var displayedNum;
for (i in imgURLArray){
str = "<li photonum="+i+">" + "<a>"+ (1+i) + "</a>" + "</li>";
$("ul.selection-list").append(str);
}
我需要在一个循环中执行此操作,但会发生什么是打印出“11”而不是“2”,因为它会在添加之前转换为字符串。
如果我尝试在字符串之外进行添加并存储在变量中,我也会遇到同样的问题,它仍会转换为字符串而不是添加。
在将数字转换为数字之前,数字(1 + 1)仍然首先转换为字符串,因此它出现了11。
答案 0 :(得分:5)
使用括号:
var str = "foobar" + (1+i) + "other stuff";
如果我尝试在字符串之外进行添加并存储在变量中,我也会遇到同样的问题,它仍会转换为字符串而不是添加。
不应该。我猜你也在做错事。
更新:您似乎正在将i
转换为未发布的代码中的某个字符串。
更新2: Don't use for..in
to loop over an array。如果它实际上是一个数组,请使用普通的for
循环:
for(var i = 0, l = imgURLArray.length; i < l; i++)
但如果是对象:
for...in
将始终将i
设置为字符串(因为它循环遍历对象的属性,这些属性并不总是整数)。这意味着您必须在进行任何添加之前转换i
:
... + (1 + (+i)) + ...
更新3:
您并不总是必须使用这样的“显式”for循环。例如,您可以按相反的顺序遍历数组,这会缩短头部:
for (var i = imgURLArray.length; i--; ) {
str = "<li photonum="+i+">" + "<a>"+ (1+i) + "</a>" + "</li>";
$("ul.selection-list").prepend(str);
}
答案 1 :(得分:1)
尝试在Number()
中包装数字像:
var i = 1;
var str = "foobar" + Number(1+i) + "other stuff";
答案 2 :(得分:0)
var str = "foobar" + (1+i) + "other stuff";
答案 3 :(得分:0)
你可以使用parseInt方法:
var str = "foobar" + (parseInt(1+i)) + "other stuff";
答案 4 :(得分:0)
原因是你的循环:
for (i in imgURLArray){
这会将imgURLArray
的所有属性名称作为字符串进行迭代。因此,您需要使用Number()
将i
转换为整数:
str = "<li photonum="+i+">" + "<a>"+ (1+Number(i)) + "</a>" + "</li>";