Javascript for循环计数器作为字符串输出

javascript for loop counter coming out as string

本文关键字:字符串 输出 计数器 for 循环 Javascript      更新时间:2023-09-26

我已经把程序简化成这样,但它仍然不正常:

var grid = [0, 1, 2, 3];
function moveUp(moveDir) {
    for (var row in grid) {
        console.log('row:');
        console.log(row + 5);
    }
}

看起来row是一个字符串而不是整数,例如输出是

row:
05
row:
15
row:
25
row:
35

而不是5,6,7,8,这是我想要的。for循环中的计数器不应该是字符串吗?

引自for..in的MDN Docs,

for..in不应该用来迭代索引顺序的Array是很重要的。数组索引只是可枚举的属性整数名称,在其他方面与一般对象相同属性。不能保证……它将返回索引以任何特定顺序排列,它将返回所有可枚举的属性,包括具有非整数名称的属性和具有继承。

因为迭代的顺序取决于实现,迭代遍历数组时,不能以一致的顺序访问元素。因此最好使用带有数字索引(或Array.forEach)的for循环或非标准的for...of循环)在数组上迭代时访问顺序很重要。

你正在用for..in迭代一个数组。这很糟糕。当你迭代for..in时,你得到的是字符串格式的数组索引。

每次迭代,'0' + 5 == '05', '1' + 5 == '15'…正在打印

你应该做的是,

for (var len = grid.length, i = 0; i < len; i += 1) {
    console.log('row:');
    console.log(grid[i] + 5);
}

关于为什么数组下标在迭代中返回以及其他有趣的东西的更多信息,请查看我的答案

对于数组,您应该使用普通的for循环而不是for...in循环。

for (var row = 0, l = grid.length; row < l; row++) {
  console.log('row:');
  console.log(5 + row);
}

我认为这是你期望的输出。

小提琴

尝试使用parseInt(..)方法强制int

console.log(parseInt(row,10) + 5);

第二个参数10将被解析为十进制值。

看到这里的答案我如何添加一个整数值与javascript (jquery)的值's返回一个字符串?