分類  >  WEB開發 >

AS3中奇怪的有關問題 for in 數組/對象索引排序錯亂的疑惑

tags:    時間:2013-12-09 22:03:04
AS3中奇怪的問題 for in 數組/對象索引排序錯亂的疑惑
雖然接觸過JS的foreach PHP的foreach asp的for each in 但從來沒碰到過類似於AS3中如此糾結的用於遍曆數組或對象元素的for in語句

一般如上提及的編程語言中,遍歷對象一般是按對象索引添加的先後順序進行遍歷,例如對象
var a={"a":"123","b":"abs","c":"xxx"};
按索引遍歷顯示的順序應該是
a = 123
b = abs
c = xxx
如此,但在AS3中卻並非如此,而且也找不到相關規律,實屬費解,代碼如下 Main.as 在test.fla文件的發布選項中,類的輸入框中填寫Main,我用的是FLASH CS5.5

package{
    import flash.display.Sprite;
    public class Main extends Sprite{
        public function Main():void{
            var aa:Object = {"x123":"aaa","xxx":"34","bn":"yuyu","a23":"yu"};
    for(var x:Object in aa){
                trace(x+"->"+aa[x]);
            }
        }
    }
}

FLASH裡面調試的結果如下
xxx->34
bn->yuyu
x123->aaa
a23->yu
就是不知道為什麼第一個不是x123->aaa而是xxx->34 不清楚是怎麼排序的
順便問下 FLASH或者AS的問題應該發佈於哪個板塊?

------解決方案--------------------
是這樣的,你不能依靠這種方法得到正確的順序,請採用數組,參見
http://stackoverflow.com/questions/2029909/as3-whats-determines-the-order-of-for-in
http://www.stevensacks.net/2008/04/07/as3-forin-object-does-not-behave-like-as2/
------解決方案--------------------
對!對象索引順序跟哈希表有關
使用哈希表的原因就是期望快速的定位到目標項(哈希表的時間複雜度為0)

不是道你為什麼要對屬性排列的順序有這麼大的興趣
對象的屬性是按名稱訪問的,與位置無關
數組才需要顧及位置,因為他是按位置標示含義的

推薦閱讀文章

Bookmark the permalink ,來源:互聯網