循环变量的Javascript;我";是否被视为字符串?
我正在使用Tianium构建一些移动应用程序,我注意到这将产生我意想不到的结果循环变量的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){
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
也会迭代继承的属性,这在大多数情况下是我不想做的。