如何防止在javascript中将值转换为字符串?

时间:2011-05-01 23:55:39

标签: javascript

    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。

5 个答案:

答案 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>";