jQuery:为什么整数被添加到像字符串这样的变量?

时间:2011-04-07 00:58:05

标签: javascript jquery string variables integer

所以我试图取一个在for语句中递增的变量,并向它添加一个整数......但由于某种原因,它正在添加整数,就像它是一个字符串一样;减法或乘法等其他操作按预期工作。

为什么会这样?编辑:我添加了整个功能;问题在于我尝试将2添加到变量x。

令我困惑的是,我能够在.eq()对象中使用x没问题,例如......

$(function() {
    $('textarea').bind('paste', function (e){
        inputGroup = $(this).parent();
        var ob = $(this);
        if (e.type == 'paste'){
            setTimeout(function(){
                var data = ob.val();
                var tabbed = data.replace(/\n/g, "\t");
                var cells = tabbed.split("\t");
                for(var x in cells) {
                    foo = x + 2;
                    alert(foo);
                    $(inputGroup).find('input').eq(x).val(cells[x]);
                }
            }, 1);
        }
    });
});

4 个答案:

答案 0 :(得分:5)

  

为什么会这样?

因为x是一个看起来像数字的字符串。首先转换为Number,您将得到您期望的结果:

"1" + 2 = "12"
Number("1") + 2 = 3

编辑:现在,我发现您正在使用split将字符串转换为数组,您的问题是肯定您正在连接字符串。首先转换为Number,问题就解决了。

是的,其他算术运算将起作用,因为它们将隐式地将操作数强制转换为Numbers。令人困惑的是,"2" * 3实际上将评估为整数6。欢迎使用Javascript。

-tjw

答案 1 :(得分:2)

没有更多的代码,特别是细胞的初始化,我无法告诉你确切的原因。但是,您只需在parseInt()上调用x即可将其转换为添加的整数

for(var x in cells) {
    foo = parseInt(x, 10) + 2;
    $(inputGroup).find('input').eq(foo).val(cells[x]);
}

答案 2 :(得分:0)

因为+是字符串连接,但*/没有等效的String方法,所以在使用它时,它会将值转换为数字。只需将x转换为整数:

for(var x in cells) {
    foo = parseInt(x, 10) + 2;
    $(inputGroup).find('input').eq(foo).val(cells[x]);
}

10中的parseInt表示使用基数为10的数字系统(而不是十六进制数,例如)。

答案 3 :(得分:0)

正如其他人所提到的,x 一个字符串。这就是原因。

有一个很好的技巧可以将字符串转换为JavaScript中的数字,但是还没有提到过:

for(var x in cells) {
  // Without the "var" here, you're setting a global
  //  variable during each loop iteration.
  var foo = +x + 2;

  $(inputGroup).find('input').eq(foo).val(cells[x]);
}