分类: 系统运维
2010-08-03 15:31:50
循环用于循环访问对象属性或数组元素。例如,可以使用 for..in 循环来循环访问
对象的属性(不按任何特定的顺序来保存对象的属性,因此属性可能以随机的顺序
出现)。
例如:
var myObj:Object = {x:20,
y:30};
for (var i:String in
myObj)
{
trace(i +
": " + myObj[i]);
}
输出:
x: 20
y: 30
还可以循环访问数组中的元素:
var myArray:Array =
["one", "two", "three"];
for (var i:String in
myArray)
{
trace(myArray[i]);
}
输出:
one
two
three
for
each..in 循环用于循环访问集合中的项目,它可以是 XML 或 XMLList 对象中的标
签、对象属性保存的值或数组元素。例如,如下面所摘录的代码所示,可以使用 for
each..in 循环来循环访问对象的属性,但是与 for..in 循环不同的是,for each..in
循环中的迭代变量包含属性所保存的值,而不包含属性的名称:
var myObj:Object = {x:20,
y:30};
for each (var num in
myObj)
{
trace(num);
}
输出:
20
30
您可以循环访问 XML 或 XMLList 对象,如下面的示例所示:
var myXML:XML =
;
for each (var item in
myXML.fname)
{
trace(item);
}
输出
Jane
Susan
John
还可以循环访问数组中的元素,如下面的示例所示:
var myArray:Array =
["one", "two", "three"];
for each (var item in
myArray)
{
trace(item);
}
输出:
one
two
three
1. 在数组中保存一百万个数据
var testArr:Array = new Array();
for(var i:Number = 0; i < 1000000; i++)
{
testArr.push(i);
}
//for花费260毫秒
var len:Number = testArr.length;
for(var j:Number = 0; j < len; j++)
{
testArr[j]++;
}
//for ... in花费8000毫秒
for(var k:String in testArr)
{
testArr[k]++;
}
//for each ... in花费58毫秒
for each (var m:Number in testArr)
{
m++;
}
经 过多次测试,for 循环平均260毫秒(不预存数组长度平均400毫秒),for … in 循环平均8000毫秒,for each … in 循环58毫秒!!所以应该尽量避免 for … in ,多用 for each … in ,用for循环的话最好预存数组长度(var len:Number =
testArr.length;)。
Object的情况,for … in 平均560毫秒,for each … in 平均8毫秒。
var testObj:Object = new Object();
for(var i:Number = 0; i < 100000;
i++)
{
testObj[i] = i + 1;
}
//for ... in
读取标签 560毫秒
for(var j:String in testObj)
{
testObj[j]++;
}
//for each ... in
直接读值 8毫秒
for each(var k:Number in testObj)
{
k++;
}
结论:
for each...in语句的速度比for...in语句要快得多,如果有可能,还是先选择for each...in
参考文献: