如何防止将值转换为JavaScript中的字符串?

Ben*_* B. 1 javascript

    var str;
    var displayedNum;
    for (i in imgURLArray){
        str = "<li photonum="+i+">" + "<a>"+ (1+i) + "</a>" + "</li>";
        $("ul.selection-list").append(str);

}
Run Code Online (Sandbox Code Playgroud)

我需要在一个循环中执行此操作,但是发生的是它打印出“ 11”而不是“ 2”,因为它在加法之前会转换为字符串。

如果我尝试在字符串之外进行加法​​并将其存储在变量中,也会遇到同样的问题,它仍然会转换为字符串,而不是进行加法。

Number(1 + 1)仍会先转换为字符串,然后再将其转换为数字,因此结果为11。

Fel*_*ing 5

使用括号:

var str = "foobar" + (1+i) + "other stuff";
Run Code Online (Sandbox Code Playgroud)

如果我尝试在字符串之外进行加法​​并将其存储在变量中,也会遇到同样的问题,它仍然会转换为字符串,而不是进行加法。

它不应该。我的猜测是您在那里也做错了。

更新:似乎您正在转换i为未发布代码中某个地方的字符串。

更新2: 不要for..in用来遍历数组for如果它确实是一个数组,请使用普通循环:

for(var i = 0, l = imgURLArray.length; i < l; i++)
Run Code Online (Sandbox Code Playgroud)

但是,如果它是一个对象:

for...in将始终设置i为字符串(因为它遍历对象的属性,这些属性并不总是整数)。这意味着您必须进行转换i 才能进行任何添加:

... + (1 + (+i)) + ...
Run Code Online (Sandbox Code Playgroud)

更新3:

您不必总是使用这样的“显式” for循环。例如,您可以以相反的顺序遍历数组,从而使头部更短:

for (var i = imgURLArray.length; i--; ) {
    str = "<li photonum="+i+">" + "<a>"+ (1+i) + "</a>" + "</li>";
    $("ul.selection-list").prepend(str);
}
Run Code Online (Sandbox Code Playgroud)