所以我试图取一个在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);
}
});
});
答案 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]);
}