什麼是資料類型?資料類型:
l 一定的資料在計算機内部的表示方式
l 該資料所表示的值的集合
l 在該資料上的一系列操作
使用資料類型來規定資料的描述和行為,有利于資料的邏輯描述和正确性檢查。任何一門程式設計語言都包含基中繼資料類型、複雜資料類型。
在actionscript3中聲明變量的格式如下:
var 變量名:資料類型;
var 變量名:資料類型 = 值;
說明:定義變量時可以不指定資料類型,但是最好指定資料類型,當資料類型不一定時可以使用*表示(var 變量名:*)
基中繼資料類型:我們在程式設計中頻繁使用到的資料類型,語言的基本構成單元。
<b>資料類型</b>
<b>描述</b>
<b>boolean</b>
布爾類型隻有兩個可能的值:true/false(1/0)。聲明了一個boolean變量但沒有初始化,預設值為false
<b>int</b>
int資料類型是一個32-bit的整數,取值範圍為:-2,147,483,648 ~ 2,147,483,647。預設值為0
<b>null</b>
null資料類型隻包含一個值null,它是string和類的預設值。其它基中繼資料類型,如boolean, number, int, uint,也包含null值,如果将null賦給上述類型的變量,在運作時會轉換為相應的預設值
<b>number</b>
number可以表示整數、無符号整數、浮點數,它使用ieee-754标準的64-bit雙精度格式表示,取值範圍為:-9,007,199,254,740,992 (-253) ~ 9,007,199,254,740,992 (253),預設值為nan
<b>string</b>
string資料類型是16-bit字元序列,使用utf-16格式存儲。預設值為null
<b>uint</b>
unit即unsigned integer,是一個32-bit的無符号整數,取值範圍:0 ~ 4,294,967,295,預設值為0
<b>void</b>
void資料類型值有一個值undefined。undefined可以賦給未指定類型的變量或指定為*的變量
說明:在actionscript3中數字存在上述三種類型——int、uint、number,而且number可以表示整數、無符号整數、浮點數。那該如何選擇使用呢?能夠使用整數時優先使用int和uint;整數有正負之分時,請使用int。隻處理正整數,優先使用uint(如處理和顔色相關的數值時,使用uint);碰到或可能碰到小數點時使用number。
複雜資料類型:是相對基中繼資料類型而言的,複雜資料類型由一些基于資料類型組成。如數組array,可以直接由一些數字或字元串作為元素組成。複雜資料類型還可以由一些複雜資料類型組合而成,如二維數組,object對象它們包含3個數組。
<b>object</b>
object資料類型由object類定義,它是actionscript中所有其它類的基類。它可以看出是一種關聯數組,包含鍵/值對,如:
var map:object = { name:"tyler", sex:"male" };
<b>array</b>
array一組資料的集合。actionscript中的數組是以非零整數為索引的非類型化、稀疏數組。
非類型化,即數組中所有元素不一定要相同。例如,下面的這個數組含有一個字元串、一個整數、一個布爾值、一個對象:
var data:array = ["a", 1, true, new object()];
稀疏,即不要求數組中每個位置都必須都有元素,可以留白。如,在索引0處有一個元素,在索引5處有另一個元素,而這兩個元素之間的索引位置卻是空的。在這種情況下,位置1至位置4的元素是未定義的,表示這些位置不存在元素,而不一定存在值為<code>undefined</code>的元素。
<b>vector</b>
vector是array的變種,僅flash player 10以上版本支援。vector是類型化的、密集數組。
類型化,即數組中元素類型必須一樣;密集,即數組中所有位置必須有值或者為null。與array相比,vector不僅類型更安全,并且性能更高。
<b>date</b>
date類表示日期和時間資訊。date類的執行個體表示一個特定時間點,可以查詢或修改該時間點的屬性(如月、日、小時和秒)。date類用于檢索相對于通用時間(格林尼治平均時,現稱為通用時間或utc)或相對于本地時間(由運作 flash player 的作業系統上的本地時區設定決定)的日期和時間值。date類的方法不是靜态方法,但僅應用于調用該方法時指定的單個date對象。
<b>error</b>
error類包含有關腳本中出現的錯誤的資訊。開發actionscript 3.0應用程式過程中,如果在flash player的調試版中運作已編譯的代碼,将彈出對話框顯示error類型的異常或子類異常,以幫助排除代碼中的故障。可以使用error構造函數來建立error對象。通常,将新的error對象從try代碼塊中引發,然後由catch或finally代碼塊捕獲。
<b>function</b>
actionscript中使用者定義的函數和内置函數都由function對象來表示,該對象是function類的執行個體。
類的方法與function對象略有不同。與普通函數對象不同,方法和與其關聯的類對象緊密關聯。是以,方法或屬性具有在同一類的所有執行個體中共享的定義。可以從執行個體提取方法并将其處理為“綁定”方法(保留與原始執行個體的連結)。對于綁定方法,this關鍵字指向實作該方法的原始對象。對于函數,this在調用函數時指向關聯對象。
<b>regexp</b>
regexp類允許使用正規表達式(即可用于在字元串中執行搜尋和替換文本的模式)。
<b>xml</b>
在as3中,xml資料類型是as3的内置資料類型,xml對象有自己的運算符。通過as3的核心類xml類和xmllist類來實作xml的操作。xml類包含用于處理xml對象的方法和屬性。xml類(以及xmllist、namespace和qname類)可實作ecmascript for xml (e4x)規範(ecma-357第2版)中定義的強大的xml處理标準。
使用toxmlstring()方法可傳回xml對象的字元串表示形式,不管該xml對象具有簡單内容還是複雜内容。
<b>xmllist</b>
xmllist類中包含用于處理一個或多個xml元素的方法。xmllist 對象可以表示一個或多個xml對象或元素(包括多個節點或屬性),是以,可以對作為一個組的多個元素調用方法,也可以對集合中的各個元素分别調用方法。
如果xmllist對象隻包含一個xml元素,那麼可以直接對xmllist對象使用xml類方法。
actionscript3和一般程式設計語言一樣支援以下運算符,而且功能一樣:
l 指派運算符(=)
l 算術指派運算符(+=、-=、*=、/=、%=)
l 關系運算符(==、!=、>、<、>=、<=)
l 邏輯運算符(&&、||、!)
l 三元運算符(?:)
除此之外,actionscript還有關系運算符:<b>全等運算符</b><b>===</b><b>、不全等運算符(!==</b><b>)</b>,它們與==、!=的差別在于在進行比較時不會進行類型轉換(唯一例外的是把int、uint、number看成是一樣的資料類型)。
actionscript3和一般程式設計語言一樣支援以下流程控制功能:if-else、while、do-while、for,用法也相同。但同時還支援<b>for…in</b><b>、for each…in</b>兩種新的流程控制。它們用來枚舉一個集合中所有的元素。所謂枚舉,就是挨個通路集合中所有的元素。那跟for有什麼差別呢,引入它們有什麼好處呢?
周遊數組時,我們可以通過索引和數組長度來周遊所有的元素。但是,如果使用object時怎麼辦?在object中,成員隻可以通過成員的名字字元串(即鍵值對中的“鍵”)通路,并不擁有數組索引遞增的規律。那麼為了通路像object這樣的非數字索引的集合,必須引入另外一種内建機制,在不知道成員的名字時,仍然可以通路到每個成員。這就是<b>for…in</b><b>、for each…in</b>被設計的原因。
for…in、for each…in
<b> var dict:object = { a:1, b:2, c:3 };</b>
<b> </b>
<b> for (var k:* in dict)</b>
<b> {</b>
<b> trace("key:" + k</b>
<b> + "\tvalue:" + dict[k]);</b>
<b> }</b>
<b> for each(var j:* in dict)</b>
<b> trace(j);</b>
<b> } </b>
<b>//</b><b>輸出</b><b>:</b>
<b>key:a value:1</b>
<b>key:b value:2</b>
<b>key:c value:3</b>
<b>1</b>
<b>2</b>
<b>3</b>
由此可以得出:當程式需要使用鍵的資訊時,用<b>for…in</b>;隻需要通路集合成員時,那麼使用<b>for each…in</b>更友善。
break和continue用來控制循環流程,在循環體内使用。break用來直接跳出循環,continue用來結束目前循環進入下次循環。
在嵌套循環中,break和continue隻能控制目前循環流程,如果想最裡層循環直接跳出等,在别的語言中使用break和continue是沒有用的。是以,在actionscript3中它們還有更強大的流程控制功能:标簽用法。這跟c語言goto語句中的标簽用法類似。給每層循環命名,然後使用break 标簽名和continue 标簽名指定對哪層循環進行控制。