我正在使用Titanium构建一些移动应用程序,我注意到这将产生我没想到的结果。
data = ['a','b', 'c','d'];
for (var i in data){
Ti.API.debug(i+1);
};
这将打印:01,11,12,13
这是Titanium特有的,还是一般用Javascript?
为什么'i'不被视为整数?我很迷茫。
感谢您的帮助。
答案 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)
您看到此行为的原因是,在数组上使用i
时for-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] 获取数据。