2012年4月5日 星期四

Actionscript3 and JavaScript 的 for . in

測試環境:
OS:windows7
IDE:flashBuider 4.6
Flex SDK: 4.6.0

ActionScript3的for ... in

特性:
  • 對Array會取回index。
  • 對Object取回key(即屬性名稱)。

範例程式碼:


     //建立一個陣列,內含三個元素
private var array:Array = ["one" , "two" , "three"];

//建立一個物件,內有三個屬性name , age , gender.
private var object:Object = {name:"小米" , age:"20" , gender:"男"};

protected function applicationCompleteHandler(event:FlexEvent):void
{
testArray();
trace("----------------------------");
testObject();
}

protected function testArray():void
{
//注意這裡取回的值會是字串型態
for (var index:String in array)
{
trace(index);
}
}

protected function testObject():void
{
for(var key:String in object)
{
trace(key);
}
}



輸出結果:


0
1
2
----------------------------
gender
name
age


回傳結果見到,陣列取回的是 index 值,而物件是取回key值。




小改一下測試函式如下,用以測試取回的索引與鍵值是否正確可用:

protected function testArray():void
{
//注意這裡取回的是字串型別
for (var index:String in array)
{
trace("Index 是 " + index + " \t array[" + index + "] 取得 " + array[index] );
}
}

protected function testObject():void
{
     //其實物件屬性的使用除了一般的點號叫用也可以使用[]叫用。 
     //因此object.name也可以object["name"]來叫用
for(var key:String in object)


{
trace("Key 是 " + key + " \t object[" + key + "]\t 取得 " + object[key] );
}
}

輸出結果:


Index 是 0 array[0] 取得 one
Index 是 1 array[1] 取得 two
Index 是 2 array[2] 取得 three
----------------------------
Key 是 name object[name] 取得 小米
Key 是 age object[age] 取得 20
Key 是 gender object[gender] 取得 男


如此驗證取得的索引與鍵值可正確無誤


在做一個特別的測驗關於Array可以動態加上屬性

在ActionScript3的Array是可以執行時期(Run time)時動態加上屬性的,因此


protected function applicationCompleteHandler(event:FlexEvent):void
{
testArrayCharacteristic();
trace("--------------------");
array.name = "花花";
array.age = "27";
array.gender = "女";
testArrayCharacteristic();
}
protected function testArrayCharacteristic():void
{
for(var index:String in array)
{
trace(index);
}
}

輸出結果:


0
1
2
--------------------
0
1
2
gender
name
age

注意非常有趣,動態加入的屬性變成了Array的key值

而若你在最後再加上以下程式碼


for(var index:String in array)
{
trace(array[index]);
}

則可得:


one
two
three
27
花花





非常有趣的特性!


JavaScript的for ... in

<script>
var _array = new Array("one" , "two" , "three");
var _object = {a:"one" , b:"two" , c:"three"};
for(var index in _array)
{
    document.write(index + "</br>");
    document.write(_array[index]+"</br>");
}
document.write("==================</br>");
for(var key in _object)
{
    document.write(key + "</br>");
    document.write(_object[key]+"</br>");
}
</script>


//report
0
one
1
two
2
three
==================
a
one
b
two
c
three


在JavaScript部分,Array無法以_array[x]的方式來賦值,但可以_array.x = "五百"來賦值。
加入:
_array.x = "五百";


for(obj in _array)
{
  document.write(obj + "</br>");
}


輸出:
0
1
2
x

沒有留言:

張貼留言