1.for与for each:
for..in 循环用来基于键进行循环访问;而 for each..in 循环用来基于与每个键关联的值进行循环访问。
2.flash.utils.Dictionary与Array,ArrayConllection,Object:
Dictionary类和Object唯一的区别在于:
Dictionary对象可以使用非字符串作为键值对的键。Dictionary类用于创建属性的动态集合,该集合使用全等运算符 (===) 对非原始对象键进行键比较。将对象用作键时,会使用对象的标识来查找对象,而不是使用在对象上调用 toString() 所返回的值.
无论用什么类型的变量作为键,都将被转换成字符串。同时,如果你使用了不同的对象作为键,都会北转换成字符串"[object Object]"作为键,因此而指向了同一个数据。
Dictionary类将没有这个限制,你可以将键设置成任何一种数据类型。
import mx.collections.ArrayCollection;
import mx.controls.Alert;
protected function label1_clickHandler(event:MouseEvent):void
{
var obj:Object=new Object();
obj[1]=1;
obj["name"]='abc';
obj[new Object()]=new Number(3);
for(var k:String in obj){
trace(k);
trace(" ----"+obj[k]);
}
// var arr:Array=new Array()[1,'abc',new Object(),new Array()]; //arr=null,不支持这种写法
// var arrC:ArrayCollection=new ArrayCollection()[1,'abc',new Object(),new Array()]; //arrC=null
var names:Array = new Array("John", "Jane", "David");
var arr:Array=new Array();
arr[0]=1;
arr[1]='abc';
arr[2]=new Object();
arr[3]=new Array(); //空数组,没有值
arr[4]=['zhangsan',23,'男']; //数组里面套数组
var arrC:ArrayCollection=new ArrayCollection();
/*arrC[0]=1; //不允许这样访问
arrC[1]='abc';
arrC[2]=new Object();
arrC[3]=new Array();
*/
arrC.addItem(1);
arrC.addItem('abc');
arrC.addItem(new Object());
arrC.addItem(new Array());
arrC.addItem(['zhangsan',23]);
var dic:Dictionary=new Dictionary();
for(var k in arr){
trace(k); //输出到Console k:0,1,2,3
trace(": "+arr[k]); //输出值
}
for(var k in arrC){
trace(k); //k: 0,1,2,3
trace(": "+arrC[k]); //输出值
}
trace(' ******************');
for each(var val in arr){ //输出值
trace(val);
}
for each(var val in arrC){ //输出值
trace(val);
}
//可以将键设置成任何一种数据类型
dic[1]=2;
dic["abc"]="abcd";
var o=new Object();
dic[o]=new Object();
var o2=new Object();
dic[02]=new Array('zhangsan');
for(var v in dic){
trace(v); //1,abc
trace(dic[v]); //2,abcd
}
}