为什么一个整数会像字符串一样被添加到变量中?

jQuery: why is an integer being added to a variable like a string?

本文关键字:添加 一样 变量 一个 整数 字符串 为什么      更新时间:2023-09-26

所以我试图采取在for语句中增加的变量,并向其添加一个整数…但出于某种原因,它把整型当成字符串来加;其他运算,如减法或乘法,按预期工作。

为什么会发生这种情况?编辑:我已经添加了整个功能;问题是我试图在变量x上加2。

让我困惑的是,我能够使用x没有问题,在一个。eq()对象,例如…

$(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);
        }
    });
});

为什么会发生这种情况?

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

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

EDIT:现在我看到您正在使用split将字符串转换为数组,您的问题是绝对,您正在连接字符串。先转换到Number,你的问题就解决了。

是的,其他算术运算也可以,因为它们将隐式地将操作数转换为数字。令人困惑的是,"2" * 3实际上会求值为整数6。欢迎使用Javascript。

-tjw

如果没有更多的代码,特别是单元格的初始化,我无法告诉您确切的原因。但是您可以简单地在x上调用parseInt()将其转换为整数以进行加法

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

因为+是一个字符串连接,但*/没有等效的字符串方法,所以当使用它们时,它将值转换为数字。将x转换为整数:

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

parseInt中的10表示使用十进制的数字系统(例如,与十六进制相反)

正如其他人提到的,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]);
}