javascript for循环计数器以字符串形式出现

sta*_*ers 9 javascript string for-loop

我把我的程序简化为这个,但它仍然行为不端:

var grid = [0, 1, 2, 3];

function moveUp(moveDir) {
    for (var row in grid) {
        console.log('row:');
        console.log(row + 5);
    }
}
Run Code Online (Sandbox Code Playgroud)

它似乎row是一个字符串而不是整数,例如输出

row:
05
row:
15
row:
25
row:
35
Run Code Online (Sandbox Code Playgroud)

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

the*_*eye 15

引自MDN Docsfor..in,

for..in不应该用于迭代Array索引顺序很重要的地方.数组索引只是具有整数名称的可枚举属性,并且与一般对象属性相同.无法保证for ... in将以任何特定顺序返回索引,并且它将返回所有可枚举属性,包括具有非整数名称和继承的属性.

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

你正在迭代一个数组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);
}
Run Code Online (Sandbox Code Playgroud)

有关为什么在迭代中返回完整数组索引以及其他有趣内容的更多信息,请查看我的答案


归档时间:

查看次数:

722 次

最近记录:

11 年,5 月 前