循环变量的Javascript;我";是否被视为字符串?

循环变量的Javascript;我";是否被视为字符串?,javascript,titanium,Javascript,Titanium,我正在使用Tianium构建一些移动应用程序,我注意到这将产生我意想不到的结果 data = ['a','b', 'c','d']; for (var i in data){ Ti.API.debug(i+1); }; 这将打印:01,11,12,13 这是Tianium特有的功能还是Javascript中的常见功能 为什么不把“i”当作一个整数?我很困惑 谢谢你的帮助 试试这个: data = ['a','b', 'c','d']; for (var i in data){

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

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

for (var i in data){
    Ti.API.debug(i+1);
};
这将打印:01,11,12,13

这是Tianium特有的功能还是Javascript中的常见功能

为什么不把“i”当作一个整数?我很困惑

谢谢你的帮助

试试这个:

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

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

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

数据
是一个数组,因此您将
用于
循环,而不是
用于in
循环:

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

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

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

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

您看到此行为的原因是,在数组上使用in的
时,
i
的类型是
string
而不是
int
。因此,
+
执行的是字符串连接,而不是加法。如果希望它是数值,则使用
for
循环

for (var i = 0; i < data.length; i++) {
  Ti.API.debug(i + 1);
}
for(变量i=0;i
这并不能直接回答您的问题,但如果您在数组中循环,则不应使用
for(数据中的var i)
。这将遍历对象的所有成员,包括方法、属性等

您要做的是:

for (var i=0, item; i<data.length; i++) {
    item = data[i];
}
for(var i=0,item;i您可以执行

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

for (var i in data){
    console.log(parseInt(i)+1);
};
但不建议这样做。因为在Javascript中,..in
循环用于键:值对(对象)。因此,如果将其与数组一起使用,每个索引将转换为字符串作为键


因此,始终对数组使用
(i=0;i

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

在其他语言中,for(数据中的i)将循环遍历每个数据


但是在javascript中,i将具有索引值,而不是数据

你不是说01、11、21、31吗?你想要的输出是什么?是
1、2、3、4
还是
a1、b1、c1、d1
还是其他什么?更多关于JavaScript中..in
以及它如何导致问题:是的。对不起,我是说01、11、21、31,那不是真的。
for
循环迭代对象的属性名,而不是它s值。对于数组,属性名是索引。@FelixKling,很好的回答,我完全读错了!经过编辑以不显示错误的答案。因此for in循环应该只用于对象而不是数组?@LeonardoAmigoni是的。但是,我根本不使用
for in
。当我想迭代自己的属性时对于一个对象,我使用
object.keys(myObject).forEach(…);
。我改为
for in
,因为
for in
也会迭代继承的属性,这在大多数情况下是我不想做的。