如何使用JavaScript循环遍历数组中的所有条目?
我以为它是这样的:
forEach(instance in theArray)
Run Code Online (Sandbox Code Playgroud)
theArray我的阵列在哪里,但这似乎是不正确的.
我不确定这是否是正常行为,但运行此:
for (var i in [1, 2, 3]) {
console.log(i + 1);
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
// 01
// 11
// 21
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下,为什么var i在这种情况下被视为字符串而不是如果我这样做for (var i = 0; i < [1, 2, 3].length; i++)?
我把我的程序简化为这个,但它仍然行为不端:
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循环中的计数器不应该是一个字符串吗?
考虑以下代码:
var arr = [111, 222, 333];
for(var i in arr) {
if(i === 1) {
// Never executed
}
}
Run Code Online (Sandbox Code Playgroud)
它会失败,因为typeof i === 'string'.
这有什么办法吗?我可以显式转换i为整数,但这样做似乎使用simpler for in而不是regular for-loop来破坏目的.
编辑:
我知道==比较使用,但这不是一个选择.
var arrayOfNumbers=[1,2,3,4,5,6,78];
for(var index in arrayOfNumbers){
console.log(index+1);
}Run Code Online (Sandbox Code Playgroud)
此示例代码的输出是.
01
11
21
31
41
51
61
为什么在Javascript中这些数组索引被视为字符串?
我注意到在Javascript中,在for..in循环中用作索引的变量将始终是一个string偶数,即使我按以下方式定义它:
var s_array = new Array();
s_array[0] = 'foo';
s_array[1] = 'bar';
for(i in s_array){
alert(typeof(i)); // String
}
Run Code Online (Sandbox Code Playgroud)
为什么它被认为是一个string而不是一个number?
当我这样做时:
const foo = [0, 1, 2]
for (i = 0; i < foo.length; i ++){
console.log(foo[i], typeof foo[i])
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
0 number
1 number
2 number
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时:
0 number
1 number
2 number
Run Code Online (Sandbox Code Playgroud)
我明白了:
0 string
1 string
2 string
Run Code Online (Sandbox Code Playgroud)
这里发生了什么??我需要知道哪些规则才能预测这一点?
编辑:我正在运行 Node 12.18.3