永发信息网

flash,for,for in,for each in,这到底是为什么呢?

答案:2  悬赏:70  手机版
解决时间 2021-01-28 10:08
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]
最佳答案
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。
全部回答
迭代对象的动态属性或数组中的元素(主要是针对object或者) 遍历集合中的所有项目。可以遍历object 和数组之外,还有xmllist等等
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
网上买一个华为畅玩6x多少钱。
数学期望值E(X)与E(3X^2-1)的关系
开通qq会员多长时间能克隆
学美术能考什么系呢??分不分一本二本呢?
英语翻译这句话原话是没有断开的,可不亦可理
深遯的意思是什么啊?知道的请说下!
lumileds led代理商有哪些
经常提到的某个服务的默认端口号,这个默认端
x^2-4(2x-1)^2+x+3(2x-1)-1=0 我忘记了点知识
2016年一级建造师市政好考吗
我的手机最近屏幕会自己动,不受控制。用了36
狐狸喂养自己的幼子,到处觅食,甚至不惜生命
内果皮的意思是什么啊?知道的请说下!
最新的提前退休政策
美宝湿润烧伤膏是在哪个时段擦的
推荐资讯
宛洛的意思是什么啊?知道的请说下!
每天坚持喝2匙初榨橄榄油有什么好处
渊云的意思是什么啊?知道的请说下!
打算考一建,以前学的是通信工程,算工程类的
颜状的意思是什么啊?知道的请说下!
下列关于信息系统与竞争战略的说法中,正确的
基金原始股怎么买卖
王者荣耀战区称号 第一怎么获得
九垓的意思是什么啊?知道的请说下!
和一个刚见两次面发生关系怎么办
需要含氧化铁80%的铁矿石多少吨
从张店到菏泽单县有几班车,都是几点
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?