第三節(jié) 創(chuàng)建并分類數(shù)據(jù) 有兩種方式可以在ActionScript中創(chuàng)建新數(shù)據(jù),這兩種方法都需要使用表達式,即我們在腳本中表述數(shù)據(jù)的代碼片語。Alvin注:有關(guān)表達式的概念在各種計算機語言的書籍中都有介紹,盡管各自措辭不同,但是基本都有一個確定的共識,那就是表達式是可以對其求值的任何語句。比如:變量hello本身就是一個表達式,對該表達式求值的結(jié)果就是hello中所包含的數(shù)據(jù)值;而數(shù)字2345也是一個表達式,該表達式的值就是數(shù)字2345本身。
字面表達式(簡稱為字面,很多計算機書籍中都稱其為字面常量)是一系列的字母、數(shù)字,以及作為數(shù)據(jù)的標點符號。數(shù)據(jù)字面的表現(xiàn)形式是程序源文件中的數(shù)據(jù)的逐字表示法。它與變量對比 —— 上一章中介紹過 —— 變量僅是包含數(shù)據(jù)的容器。每種數(shù)據(jù)類型都定義了其自己的字面創(chuàng)建規(guī)則。下面是一些字面的例子: "loading...please wait" // a string literal 1.51 // a number literal ["jane", "jonathan"] // an array literal
請注意,電影剪輯無法用字面表述,但是可以通過實例名被引用。
我們也能夠利用某個復合表達式程序化地產(chǎn)生數(shù)據(jù)。復合表達式以代碼片語的形式表述數(shù)據(jù),該代碼片語必須能被計算求值,而非僅是逐字的表達。例如,下列這些復合表達式都以產(chǎn)生一個單數(shù)據(jù)為結(jié)果: 1999 + 1; // yield the datum 2000 "hi " + "ma!" // yield the datum "hi ma!" firstName // yield the value of the variable firstName _currentframe // yield the frame number of the playhead's current position new Date () // yield a new Date object with the current date and time
注意上述所列的例子中,個體的字面表達式,比如1999和1,可以成為復雜的表達式的有效組成部分,比如1999 + 1。
無論我們使用字面表達式還是復合表達式來創(chuàng)建數(shù)據(jù),都必須將我們想要在以后使用的每個數(shù)據(jù)加以存儲。舉例說明:表達式"hi " + "ma!"的值將會丟失,除非你存儲它,比如說,存于一個變量中。如: // this datum is fleeting, and dies immediately after it's created "hi " +"ma!";
// this datum is stored in a variable and can be // accessed later via the variable's name var welcomeMessage = "hi " + "ma!";
我們?nèi)绾螌?shù)據(jù)分類到適當?shù)念愋椭校恳簿褪钦f,我們怎樣將某個數(shù)據(jù)指定為數(shù)字、字符串、數(shù)組,或其他的什么類型?在大多數(shù)情況下,不需要我們親自分類新數(shù)據(jù);ActionScript解釋器會自動地指派或推斷出每個數(shù)據(jù)的類型 —— 這當然是基于一套內(nèi)部規(guī)則。
1.自動定義字面的類型 通過檢查某個字面數(shù)據(jù)的語法,解釋器可以推斷出它的類型。如同下列代碼片段的注釋中所解釋的那樣: "animal" // quotation marks identify "animal" as a string 1.35 // if it contains only integers and a decimal, it is a number true // special keyword true identifies this as a boolean null // special keyword null identifies this as a null type undefined // special keyword undefined identifies the undefined type
["hello", 2, true] // square brackets and values separated by commas indicate that this is an array {x: 234, y: 456} // curly braces and property name/value pairs separated by commas indicate that this is an object
如你所見,對數(shù)據(jù)字面使用正確的語法是極其重要的。不正確的語法會引起錯誤的發(fā)生或者導致對數(shù)據(jù)內(nèi)容的曲解。如例: animal // missing quotes -- animal is interpreted as a variable, not a string of text "1.35" // numbers in quotes are treated as strings, not numbers 1. 35 // space before the 3 causes an error "animal // missing closing quotation mark causes an error
2.自動定義復合表達式的類型 解釋器計算表達式的值以便確定其數(shù)據(jù)類型。考慮下面的例子: pointerX = _xmouse;
因為_xmouse將鼠標指針的位置以數(shù)字形式存儲,表達式_xmouse的類型總是數(shù)字型,因此,變量pointX也成為數(shù)字型。
數(shù)據(jù)類型被解釋器自動地確定 —— 通常,這符合我們的要求和期望。但是,某些意義曖昧的事例需要我們理解一些規(guī)則;而這些規(guī)則被解釋器用來確定某個表達式的數(shù)據(jù)類型?紤]下面的表達式: "1" + 2;
加號左邊的操作數(shù)是一個字符串("1"),而右邊的操作數(shù)是一個數(shù)字(2)。加號操作符作用于所有的數(shù)字(加法)和字符串(串聯(lián))。那么表達式"1" + 2的值到底是數(shù)字3還是字符串"12"?為了明確這些模糊之處,解釋器依賴于一個固定的規(guī)則:加號操作符(+)對字符串的支持總是處于數(shù)字之前。所以,該表達式求值的結(jié)果是字符串"12"而不是數(shù)字3。這個是一個專橫的規(guī)則,但是它提供了一種解釋代碼的協(xié)調(diào)的方式。你應當記住作為加號操作符的典型用法的該規(guī)則被啟用于:當有一個操作數(shù)是字符串時。該規(guī)則適用于連接操作數(shù),而非數(shù)字的相加,如下例所示: trace ("the value of x is: " + x);
連接類型迥異的數(shù)據(jù)或在某個上下文關(guān)系中使用一個與期待的數(shù)據(jù)類型不匹配的數(shù)據(jù)會產(chǎn)生曖昧的語義。這迫使解釋器根據(jù)專斷卻可預知結(jié)果的規(guī)則進行自動的數(shù)據(jù)類型轉(zhuǎn)換。讓我們考察一些發(fā)生自動轉(zhuǎn)換的事例,以及一片數(shù)據(jù)從一種類型轉(zhuǎn)換為另一種類型的預期結(jié)果是什么。
to be continue... alvin
出處:藍色理想
責任編輯:無意
上一頁 數(shù)據(jù)和數(shù)據(jù)類型(2) - 用數(shù)據(jù)類型來保留意義 下一頁 數(shù)據(jù)和數(shù)據(jù)類型(4) - 數(shù)據(jù)類型轉(zhuǎn)換
◎進入論壇Flash專欄版塊參加討論
|