Javascript for loop var“i”被视为字符串?

时间:2012-03-06 20:27:51

标签: javascript titanium

我正在使用Titanium构建一些移动应用程序,我注意到这将产生我没想到的结果。

data = ['a','b', 'c','d'];

for (var i in data){
    Ti.API.debug(i+1);
};

这将打印:01,11,12,13

这是Titanium特有的,还是一般用Javascript?

为什么'i'不被视为整数?我很迷茫。

感谢您的帮助。

7 个答案:

答案 0 :(得分:5)

这不会直接回答您的问题,但如果您循环遍历数组,则使用for (var i in data)。这将循环遍历对象的所有成员,包括方法,属性等。

你想要做的是:

for (var i=0, item; i<data.length; i++) {
    item = data[i];
}

答案 1 :(得分:4)

data是一个数组,因此您使用的是for循环,而不是for-in循环:

var data = [ ... ];
var i;

for ( i = 0; i < data.length; i += 1 ) {
    Ti.API.debug( i + 1 );
}

或者,您可以使用forEach数组方法:

data.forEach( function ( val, i ) {
    Ti.API.debug( i + 1 );
});

答案 2 :(得分:1)

您看到此行为的原因是,在数组上使用ifor-in的类型为string而不是int。因此+正在进行字符串连接而不是添加。如果您希望它是数值,那么使用for循环

for (var i = 0; i < data.length; i++) {
  Ti.API.debug(i + 1);
}

答案 3 :(得分:0)

试试这个:

data = ['a','b', 'c','d'];

for (var i in data){
    Ti.API.debug(i*1+1);
};

乘以i x 1将强制它将其识别为数字。

答案 4 :(得分:0)

试试这个:

Ti.API.debug(parseInt(i)+1);

答案 5 :(得分:0)

你可以做到

data = ['a','b', 'c','d'];

for (var i in data){
    console.log(parseInt(i)+1);
};

但不建议这样做。因为在Javascript for..in中循环用于键:值对(对象)。因此,如果将它与数组一起使用,则每个索引都将转换为字符串作为键。

所以请始终将for(i = 0; i < length; i++)与数组一起使用。

答案 6 :(得分:0)

这是因为javascript以这种方式处理每个循环。

在其他语言中, for(i in datas)将遍历每个数据。

但在javascript中,我将拥有索引值而不是数据。所以你必须通过 datas [i] 获取数据。