var testArr:Array = new Array();
for(var i:Number = 0; i < 10000; i++)
{
testArr.push(i);
}
var len:Number = testArr.length;
for(var j:Number = 0; j < len; j++)
{
trace(testArr[j]);
testArr[j]++;
}
for(var k:String in testArr)
{
trace(testArr[k]);
testArr[k]++;
}
for each (var m:Number in testArr)
{
trace(testArr[m]);
m++;
}
无论testArr.length的值有多小,值有多大.在这三个for之中,随便先一个来做,就正常输出.
如果把三个加在一起来做.就会出现两个undefined啊.
如果用for in 与 for each in来做,还是会出现一个undefined啊.
这是为什么呢?
.
.
还有一个,在for in里面k:String ,k是String呀,为什么后面可以用数组的形式呢?testArr[k]
flash,for,for in,for each in,这到底是为什么呢?
答案:2 悬赏:70 手机版
解决时间 2021-01-28 10:08
- 提问者网友:沉默的哀伤
- 2021-01-27 16:54
最佳答案
- 五星知识达人网友:梦中风几里
- 2021-01-27 18:11
1. 关于为什么k:String也可以当下标用,这是因为AS是动态语言,其数组的内部实现实际上是哈希表,其键都是以字符串形式保存的,数组允许用数值作下标进行访问实际上也是通过把数值下标转化为字符串来进行的。也就是说,testArr[10]和testArr["10"]完全等价。
2. 首先要搞清楚for...in和for each...in的区别。按照上面说的数组是哈希表,于是就很容易理解他们的区别:for...in是遍历键,for each...in是遍历值。所以在上面的for each循环里,m是这个数组中的一个个值,因此把它当作下标来用( testArr[m] )就是概念错误。出现undefined的原因就在这里。前两个循环都没错,但每一个循环都把所有元素的值增大1,因此两个循环过后,元素的值就是从2到10001而不是0到9999,因此for each循环实际上就是输出testArr[2], testArr[3], ... testArr[10001],显然最后两个是没有定义的。如果只有for...in一个循环的话,所有元素值都加1,因此就是一个undefined。
2. 首先要搞清楚for...in和for each...in的区别。按照上面说的数组是哈希表,于是就很容易理解他们的区别:for...in是遍历键,for each...in是遍历值。所以在上面的for each循环里,m是这个数组中的一个个值,因此把它当作下标来用( testArr[m] )就是概念错误。出现undefined的原因就在这里。前两个循环都没错,但每一个循环都把所有元素的值增大1,因此两个循环过后,元素的值就是从2到10001而不是0到9999,因此for each循环实际上就是输出testArr[2], testArr[3], ... testArr[10001],显然最后两个是没有定义的。如果只有for...in一个循环的话,所有元素值都加1,因此就是一个undefined。
全部回答
- 1楼网友:街头电车
- 2021-01-27 19:43
迭代对象的动态属性或数组中的元素(主要是针对object或者) 遍历集合中的所有项目。可以遍历object 和数组之外,还有xmllist等等
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯