我被告知不要for...in
在JavaScript中使用数组.为什么不?
我不确定这是否是正常行为,但运行此:
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来破坏目的.
编辑:
我知道==
比较使用,但这不是一个选择.
我正在使用Titanium构建一些移动应用程序,我注意到这将产生我没想到的结果.
data = ['a','b', 'c','d'];
for (var i in data){
Ti.API.debug(i+1);
};
Run Code Online (Sandbox Code Playgroud)
这将打印:01,11,12,13
这是Titanium特有的东西还是一般用Javascript?
为什么'i'不被视为整数?我很迷茫.
谢谢你的帮助.