DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> WML Script語法基礎
WML Script語法基礎
編輯:XML詳解     

WML Script是屬於無限應用協議WAP應用層的一部分,使用它可以向WML卡片組和卡片中添加客戶端的處理邏輯,目前最新的版本是1.1版。WML Script1.1是在歐洲計算機制造商協議會制定的ECMAScript腳本語言的基礎上,經過修改和優化而指定的。它能夠更好的支持諸如移動電話類的乍帶寬通信設備,在WML編程中使用WML Script可以有效的增強客戶端應用的靈活性,而且,我們也可以把WML Script作為一個工具使用,開發出功能強大的WAP網絡應用和無限網頁。本章我們將詳細講解WML Script1.1編程的基礎預法制時,如基本規則、變量預數據類型、操作賦予表達式等。為了敘述上的簡便,以後我們將“WML Script1.1”簡稱“WMLScript ”。

4.1 WML 程序中調用WML Script函數

經過前兩章的學習,熟悉C語言的讀者可能會認識到,WML 的函數功能、邏輯運算功能等都是十分有限的。而WMLScript提供了豐富的函數功能,我們在WAP應用開發可以使用WMLScript來增強WML編程。因此,WMLScript成為擴展WML編程能力的主要開發工具。

4.2 WMLScript的主要優點及其字節碼解釋器

WMLScript具有一套定義好的字節碼和一個解釋器參考結構。無線網絡傳輸中WMLScript的數據均以二進制格式進行傳輸,所以,用戶可以使用乍帶寬通信信道,從而能夠保持客戶端手機只需要最小限度的內存。ECMAScript修改後得到的WMLScript能夠更快、更小、更容易的編譯程序為字節碼形式。所有這些特點,是WMLScript具備了WML所不能具備的很多優點和功能。

4.2.1 使用WMLScript的主要優點

WMLScript的設計宗旨是為WMLScript系統提供一般的腳本處理能力,使用WMLScript我們可以進一步補充基於XML的WML語言的編程功能,開發針對乍帶寬的網絡應用及內容,如文本、圖像、選擇列表等,我們可以使用簡單的格式編寫出更靈活和更具可讀性的用戶界面。WMLScript具備的WML所不能具備的優點和功能,主要包括如下幾個方面: (1)檢查用戶輸入的合法性:

(2)擴展用戶浏覽器的功能,比如允許程序員開發手機的電話呼叫、發送短信息、存儲電話號碼、管理電話簿或SIM卡等;

(3)生成用戶端的確認、提示、警告信息或操作對話框,並使之快速顯示在浏覽器上;

(4)在用戶浏覽器的更改後,能夠對浏覽器端的軟件和參數進行擴展與配置;

(5)最大程度克服客戶端的乍帶寬通信連接限制,並提供豐富的程序功能;

(6)補充WML並使之實現針對微型移動終端設備的多種服務,如支持高級用戶界面、增加客戶端智能型、提供用戶浏覽器外圍功能的訪問能力,以及在服務器與客戶端浏覽傳輸數據是減少帶寬占用等。

4.2.2 WMLScript的字節碼解釋器

在WMLScript的字節碼解釋器解釋之前,WMLScript語言編寫的文本格式的程序將被首先編譯為二進制格式的代碼。編譯時,編譯器通常先將WMLScript程序分成若干個編輯單位,每個單位的程序都包含一定數量的語句行和WMLScript函數,然後,WMLScript的編譯器將按照這些編譯單位,逐一將WMLScript程序作為輸入內容,而把對應的字節碼作為輸出內容。當用戶通過WAP手機調用WMLScript程序時,編譯器的編碼功能即被激活、執行。

4.3 WMLScript基本規則

WMLScript在許多基本規則方面沿用了WML的做法。不過,由於WMLScript是以C語言為藍本而指定的,所以它的語法特征和C語言非常相像。如果大家對C語言比較熟悉,那麼學習和掌握這部分內容應當是比較容易的。

4.3.1 WMLScript與URL

與WML一樣,WMLScript也沿用了WWW和Html訪問資源的URL、HTTP等規范,並擴大了URL使用的范圍。在WMLScript中,不僅超鏈接、文件路徑即文件名可以作為URL處理,外部函數、訪問控制信息等也可以作為URL處理。

為此,WMLScript采用了WML的變通方法,即改進Html命名資源為值的方式,采用程序段錨點(Fragment Anchor)的形式來處理資源定位。程序段錨點根據文檔URL規則進行定義,並按照程序段標識符前加井字號(#)的方式書寫。使用程序段錨點,WMLScript程序可以在WMLScript編譯單位內可任意指定的函數,並可在調用該函數的同時傳遞所需的參數。

4.3.2 詞法結構

WMLScript編程中的詞法結構並不復雜,我們下面就從大小寫敏感、空格、換行、注釋即保留字等方面講解相關的具體規則。

(1)內容類型。WMLScript的內容類型主要針對文件形式和二進制形式兩種情況,類型結構可以在服務器端進行指定,具體形式為:

文本形式:text/vnd.wap.wmlscript;

二進制形式:application/vnd.wap.wmlscriptc。

具體指定方法我們在第4章已經介紹過,這裡不再重述。

(2)大小寫敏感。WMLScript1.1是一種大小寫敏感的腳本語言。它所設計的各種關鍵字、變量和函數名都必須合理的使用大小寫。

(3)空格和換行。一般情況下,WMLScript程序值形式將忽略所有的空格、制表符合換行符等。但如果把這些特殊字符通過代碼進行表述,或者作為字符串進行處理時,WMLScript將不再忽略它們。了如,字符串"Oct 28,2001"中含有空格,該空格在執行時就不會被忽略,它與不含空格的字符串"Oct28,2001"是不同的。

(4)注釋。與WML編程一樣,在WMLScript腳本程序中也可以加入注釋內容。注釋內容不被程序執行,且注釋不能嵌套。WMLScript的注釋方法有兩種:

其一,行注釋。即使用雙斜行號(//)引導以一行內容,這一行內容全部作為注釋內容。如:

//這是以行注釋,由雙斜槓號開始到結束都是注釋。

其二,塊選擇。即以符號“/*”開始,而以符號“/*”結束的期間所有內容都是注釋內容。如:

/*這就是塊注釋,加在中間的內容就是注釋內容*/

(5)數據類型與直接編碼。WMLScript允許將4種類型的數據直接編碼並可嵌套並可嵌如在程序之中。直接編碼的4中數據類型為:整數、浮點數、字符串和布爾值。另外,“無效性”值也可直接編碼” 1. 整數。當以十進制、十六進制或八進制方式使用整數時,可對這類整數進行直接編碼。

編程序時,十進制的數字均不以0開頭,只包含0~9的數值串;十六進制的數據以OX或者Ox開頭,只包含0~9、a~f或者A~F的字符串;八進制的數均以0開頭,只包含0~7的數字串。

2.浮點數。浮點數通常定義為含有小數點的數字,可以包含小數和指數部分。浮點數的形式較多,可以使十進制的整數或浮點數,可以是分數,也可以是指數;但一個浮點數必須至少有一個數。

指數是以e或E開頭,後面跟著一個整數。指數是以10為底冪。例如:e0時10的零次冪,例如:e0時10的另次冪,e-2時10的負2次冪集等於0.01。指數可以帶符號,正好(+)或者減號(-),它們分別代表是正指數和負指數。

3.字符串。字符串是指定義在成對的雙引號("")或單引號(‘ ’)之間的內容。

由於WMLScript只允許使用成對的雙引號或但引號來定義字符串,所以程序中使用一個單引號或一個雙引號時就會出現編譯錯誤。

考慮到有些特殊字符不能在字符串中直接顯現出來,所以WMLScript提供了轉譯序列來表示這些特殊字符。

4.布爾型。它只是ture和false兩個數值,用於表示WMLScript中的“真值”或“假值”。布爾型數據可參與異、或等運算,具體規則我們後面介紹。

5.無效型。也稱為“空類型”,它是WMLScript支持的一個表示無效值的量,以invalid表示。該兩與C語言中的NULL類似。

4.保留字。WMLScript中定義有一個保留字集合,含有一些表示特殊意義的單詞這些次不能另外定義,也不能最為其他標識符。WMLScript中的保留字如下:

acces http agent if break isvalid continue meta header

div name div= path domain return else typeof while

equiv url extern use for user function var

另外,WMLScript還為將來的版本預留了一些保留字,主要有:

case finally catch import class private const public debugger

sizeof default strUCt do super enum switch eXPort throw

extends try

WMLScript還有一些沒有使用的保留字:

delete null in this lib void new with

7.標識符。WMLScript的標識符可以指定或命名3種元素:變量、函數和標注。標識符不能以數字開頭,但能一段下劃線(-)開頭,而且,標識符不能是WMLScript的保留字。例如,timeOfDay、speed 、quality、HOME_ADDRESS、_myName、__、varO等都是合法的標識符;而以數字或非短下劃線的特殊符號開頭的字串,以及保留字等都屬於不合法的標志賦,如while、for、if、my~name、$sys、123、3pIEcs、take.this等。

由於WMLScript是嚴格區分大小寫的,所以字母相同但大小寫不同的標識符不是同一個標識,例如,Work和work就是不同的標識符。

8.名稱空間。WMLScript提供了比較自由的名稱空間,同一標識符可以同時用作不同的目的。例如,作為某一函數名稱的標識符,還可以同時用作變量名、函數參數、程序標注等,使用時他們的屬性或值等並不相互影響。在下面的簡單的例程中,myTest這一標識符即用作了函數名,又用作了變量名、函數參數名、函數參數名、常量名。顯然,WMLScript的這一特定為我們編寫程序提供了很大的方便。

4.3.3 WMLScript程序的基本書寫規則

WMLScript程序的基本書本寫規則:

1.程序由若干語句或函數組成,函數有由若干語句組成;

2.每個完整的語句後面必須加上分號(;),語句關鍵詞語操作數之間必須有空間;分號(;)是WMLScript程序的組成部分;

3.函數體之間必須使用成對的花括號({ })括起來,而且函數結束時在右花括號(})的後面還要加上分號(;);函數說明部分,如函數名、函數類型、函數參數等要放在花括號({})的前面;

  4.有些語句可能也需要實用花括號({ })辦含內容,這類語句通常也可以放在函數中,所以花括號({ })是可以嵌套的。

當然,不同的語句、參數、變量等元素在聲明和書寫時可能還有一些更細的要求,具體我們後面介紹這些元素是再專門給出,

4.4 變量與數據類型

變量即數據類型是所有編程語言的概念和組成部分,WMLScript對此也不例外。它對其變量使用方法和數據類型定義方法給出了詳細的規定。變量通常與某數據之相對應,我們可以給變量賦值,並可在程序執行中改變變量的值。下面我們講解WMLScript有關變量與數據類型的詳細規定。

4.4.1變量及其聲明

變量是在WMLScript腳本程序中具有值的符號名,或說標識符。使用變量可以存儲和改變程序中需要的數據。與C語言不同的是,WMLScript僅支持函數內定義的變量或用於傳送數的參變量。

變量使用前必須進行聲明,也就是定義變量,即指定變量的名字。聲明變量的關鍵字是var,它的後面根上作為變量名的合法的標識符,並於最後加上分號(;),即完成一個量的聲明。聲明變量是可以使用var一次聲明多個變量名,相鄰變量之間使用都號(,)間隔。

一般情況下,我們在給變量命名的時候,都希望能夠使用有意義的變量名。例如,當需要使用一個變量表示一本書的價格時,雖然將變量命名為j或book都沒有什麼錯誤,但若能命名為bookPrice則會是的WMLScript腳本程序具有更好的可讀性,可以方便編程人員進行腳本的編寫和調試工作。而且,由於WMLScript在給變量命名是不能使用保留字,所以考慮到避免由於一時的疏忽時變量名欲保留字發生沖突,我們建議使用多個單詞組合在以其作為一個變量的名稱,這是一個比較好的解決辦法。例如,如果要定義一個變量來存儲的、一本書的價格,那我們可以不妨使用bookPrice或者book_price作為變量的名稱,這樣,一方面可以時變量顯得更加清晰,另一方面也可以避免變量與保留字的沖突問題。

以上只是我們對於變量命名的建議,並不是強制性的要求,用戶完全可以不按照我們的要求來做,只要遵守WMLScript對於標識符命名的要求就可以了,但養成良好的編程風格不論是對編程人員還是對腳本編寫人員來說,都是十分有意義的。

4.4.2 變量的作用域與生命期

一個變量的作用域是指在程序中能夠引用這個變量的一段代碼。由於WMLScript僅支持函數內定義的變量,所以WMLScript變量的作用與通常就是定義它們的那個函數。在該函數之外,變量不再發揮直接作用。

變量的生命起始值從變量聲明開始到失效為止。變量的生命期也被稱為變量的持久期、存活期。一個變量在定義它的整個函數內都是有效的,函數內的任何語句塊都不會削減變量的生命期或限制變量的作用域。

如果一個變量未經生命就直接使用,或聲明過後再次聲明,都會破壞變量的生命期。前一種情況會導致變量沒有開始聲明期,即沒有“生命”;而後一種情況則導致變量聲明期沒有結束以前就重新賦予聲明期,即讓它多次“降生”。這都會導致變量無效使用。下面函數中的變量使用就說明了這一問題:

function foo(){

x=1;//錯誤:變量使用前沒有聲明,改變量還沒有“聲明”。

var x,y,z;

y=x+3;

var zd =invalid

if(x){

var(y);//錯誤:這一變量已經聲明,這裡是重復聲明。

};

};

4.4.3 變量的使用

WMLScript的變量只能在定義它的函數內使用。使用時需要聲明變量,聲明變量是可以同時對變量賦值,甚至對變量進行運算。例如,下面的簡單函數就說明了變量的這種靈活的使用方法:

function ourAge(){

var myAge=38;

var yourAge=26;

var ourAge=myAge+yourAge;

return ourAge;

};

使用變量時可通過調用變量名字的形式來實現。上面例子中的“var ourAge=myAge+yourAge;”一句,通過調用變量名,變量ourAge對變量myAge和變量yourAge實行了求和操作。

4.4.4 變量類型與數據類型

WMLScript是一種“弱類型”的語言,及其變量沒有確定的類型。WMLScript變量的類型有改變量所賦數據的類型決定,並根據數據類型的改變而改變。WMLScript只支持內部定義的數據,因此我們編寫程序是無需指定WMLScript變量的類型,WMLScript減根據變量而賦數據的類型自動進行匹配。由於WMLScript的數據類型共有整數、浮點數、字符串、布爾型和“無效型”五種類型,所以WMLScript變量的類型所能匹配的也就是這五種類型。

4.4.5 變量值域

由於變量類型尤其所賦數據的類型決定,所以變量值與域其所賦數據的可取范圍等價的。下面的我們就給出整數、浮點數、字符串和布爾型的區值范圍,以參照確定應類型變量的值域。 1.整數的范圍。WMLScript支持的整數是32位的,也就是說整數的區值范圍是從2147483648到+2147483647。我們可以在程序運行期是用Lang函數來取得這些值,如:

Lang.maxInt(); //獲取最大的整數

Lang.maxInt(); //獲取最小的整數

2.浮點數的范圍。它是指WMLScript浮點數的精度所能表示的最小和最大數值WMLScript支持32為的單精度浮點數,其最大至時3.40282347E+38,最小的非零的數是1.17549435E-38或更小(按照正常的精度)。

我們可以使用浮點Float函數庫在程序運行其取得這些數值:

Float.maxFloa(); //獲得WMLScript所支持的最大浮點值

Float.maxFloa(); //獲得WMLScript所支持的最小浮點值
對於運行期出現的一些特殊的浮點數,WMLscript將按照下述規則處理:

其一,如果操作結果是一個不能被單精度浮點數所能表示的數值,那麼該結果將被認為是invalid,即無效值;

其二,如果操作結果發生下溢出,那麼結果將作為0.0處理:

其三,負的零和正的零是完全相等的。

3.字符串的范圍。任何由於字母、數字或特殊字符組成的符號串都是WMLScript中定義的有關字符串的操作或String庫中的函數控制字符串。

4.布爾型數據的范圍。布爾型數據只有ture和flase兩個取值,這也是布爾型變量的兩種數值。我們可以使用布爾型數據取初始化或指定某一變量的數值,或將布爾值變量寫入一個需要布爾值作為參數的語句。布爾值可以是數值運算的結果,也可以是邏輯運算的結果。

下面就是定義布爾型變量並賦初值的例句:

var truth=truth;

var lIE=!truth;

4.5 操作符與表達式

在WMLScript中,表達式可以把變量、常量與操作符結合起來,經過運算能夠產生一定的運算結果。表達式運算後產生的結果可以是整數型、浮點數型、字符串型或布爾型的數據。其實,對於表達式我們並不陌生,例如,1+2就是一個簡單的表達式。

WMLScript的表達式主要有兩種類型。一種是賦值表達式,即把數據賦給變量的一種表達式,例如,myBook=3,在這個表達式中,將3 賦給變量myBook,同時,這個表達式本身也有一個運算結果,那就是3。另外一種是運算表達式,它是指產生一個運算結果而不進行賦值操作的表達式,例如1+2就是一個運算表達式,在這個表達式運算產生的結果是3, 但這個表達式並沒有把運算結果賦給變量。

在表達式運算的過程中,表達式中操作一個或這兩個數據產生運算的符號做操作符,被操作符操作的數據稱作操作數,在WMLScript中我們會使用到各種操作符,下面就對操作符及有關的表達式進行詳細講解。

4.5.1 賦值操作符

賦值操作符用於賦值操作,即給變量指定所需的數值,它能把有操作數的運算結果給做操作數,最簡單的賦值操作符就是“=”,例如x=2,就是將2賦值給變量x。在如以下幾行語句都是賦值操作:

var="abc";

var b=a;

b="def";

賦值操作符不需要指定使用對象,也不會改變賦值操作符右邊變量的數值。WMLScript的賦值操作符主要包括以下幾種:

1.=。用於賦值操作,將有操作數賦給左操作。

2 +=。將有操作數與左操作數進行相見運算,然後把運算結果賦值給左操作數。例如,假設x=3,那麼x+=2運算後的結果為x=5。

+=是比較特別的操作符,因為它可以將兩個字符串相連,所以+=操作符也可以對字符串進行操作,然後將連接後的字符串賦給左操作數。例如,假設x="Happy",那麼x+="new Year"運算後結果是x="Happy New Year"。

3.-=。將左操作數簡取有操作數,然後把運算結果賦值給左操作數。例如,假設x=3那麼x-=運算後的結果為x=1。

4*=。將左操作屬於有操作符進行相乘運算,然後把運算結果賦值給左操作數。例如,假設x=6,那麼x*=2運算後的結果為x=6。

5/=。將右操作屬於右操作符進行相乘運算,然後把運算結果賦值給左操作數。例如,假設x=6,那麼x*=2運算後的結果為x=6。

6div=。擁有操作數處理左操作數,然後把運算結果中的整數部分賦值給左操作數,例如x=7,那麼xdiv=2運算後的結果為x=3。

7%=。功能是求余數並賦值,用右操作數除以做操作數,最後把運算得到的余數值給操作數。例如,假設x=7,那麼x%=3運算後的結果為x=1。

8<<=。功能是帶符號左位移並賦值,即將左操作和右操作數進行左位移操作,在將結果賦給左操作數。

9>>=。可將左操作和右操作進行右操作進行補零右位移操作,在將結果賦給左操作數。

4.5.2 數學運算操作符

數學運算操作符可以對數值類型的操作數進行運算,然後返回一個數值類型的運算結果。

1+。這是加運算操作等,它對應著數學運算中的加法運算,例如表達式1+2的運算結果為3。

加操作符還可以對字符串類型的操作數進行運算,然後將兩個字符串相連起來作為運算

2- 。即檢操作符,對應著速學運算中的減法運算,例如表達式2-1的運算結果為1。

同時,“-”還是一個取負操作符,當它作為取負操作符的是一個操作數,取負操作符的功能使返回操作數的相反數。

3*。這是乘操作符,它對應著數學運算中的乘法運算,例如表達式2*3的運算結果為6。

4/。即除操作符,對應著數學運算中的除法運算,但WMLScript中的除法運算有些特別,在WMLScript中,除法運算後的結果是一個浮點數,而不想C語言或者Java語言那樣在整數進行除法運算式井運算結果強行轉化整數。在WMLScript中,1/2=0.5,而在Jave中,1/2=0。

5div。這是整除操作符,對應著數學運算中的整數運算,運算後的結果一個整數,這一點與C語言或者Java語言中的情況是一樣的,可以在整數進行除法運算式將運算結果強行轉換整數。

6%。即取模操作符,它對應著數學運算中的取莫運算,也就是將兩個操作相除,返回相除後的余數。

取模操作符主要用於判斷一個數字是否能被另一個數字整除。

((the Year%3==0))&&(the Year%100!=0))(the Year%400==0)

其中&&代表的是邏輯運算中的與運算,代表的是邏輯運算中的或運算,關於邏輯運算,我們後面會詳細介紹。

7++。這是遞增操作符,它只有一個操作數,操作可以在操作符的左邊,也可以在操作符的右邊,它所完成的運算操作是將操作數加1。假設操作數名稱為j,值為2,那麼++j加1,然後返回j的值3;而j++則實現返回j的值2,然後將j加1。

在循環中,我們常常會用到遞增操作符的作用正好相反。遞減操作完成的運算操作是經操作數減1。例如,假設操作數名稱為j,值為2,那麼--j先將j減1,然後返回的值1;而j--是先返回j的值2,然後將j減1。

4.5.3 位操作符

為操作符在運算實現將操作轉化32位的二進制數,然後對每個操作數分別按位進行運算,運算後在將二進制的結果按照標准WMLScript數值類型返回運算結束。

1&。這是為與操作符,它可以對兩個操作數按位進行於操作,其運算規則是:

0&0=0,0&1=0,1&0=0,1&1=1

2。這是位或操作符,它可以對兩個操作數按位進行或操作,運算規則是:

00=0 ,01=1,10=1,11=1

3^。這是唯一或操作符,它可以對兩個操作按位進行異或操作,其運算規則是:0^0=0,0^1=1,1^0=1,1^1=0

4~。這是位非操作符,它只有一個操作數,可對操作數按位進行非操作,運算規則是:~0=1,~=0

5<<。這是左移操作,它可以對左操作數進行向左一位的操作,由操作數給定了要移動的位數,在移動過程中,左操作數的最低為補充0。

6>>。這是右移操作符,它可以對左操作數進行向右移位的操作,由操作數給定要移動的位數,在移位的過程中,丟棄向右移的位。

7>>>。這是填0右移操作符,它與右移操作符相似。當對證正數進行操作時,它們的效果完全相同;不同之處在於,當進行負整數右移操作時,因為負責轉化為二進制後,最高為1,所以在進行右移操作後,最高位仍然補充1,而在進行填0右移操作時,最高為補充的是0,因此,這是負數將轉化為正數。

4.5.4 邏輯操作符

邏輯操作符可以將布爾類型的表達式組合起來,完成邏輯運算操作,然後返回邏輯運算的結果——真或假,這樣就可以完成比較復雜的邏輯判斷工作。邏輯操作共有3種;

1&&。即邏輯與操作符它只有在兩個操作數都為ture的時候,返回結果為ture,在其他情況下,返回結果為false或者invalid。

2。這是或操作符,它在兩個操作數至少有一個為ture的時候,返回結果為ture,在其他情況下,返回結果為false或者invalid。

3!。即非操作符,它只有一個操作數。當操作數為ture時,返回結果為flase;返回結果為ture.

4.5.5 比較操作符

比較操作符可以把操作數進行比較,然後返回一個邏輯值,表明這個比較操作的結果是否為真。比較操作的操作數可以是數值類型或者字符串類型的數據。比較操作符也常被稱為關系運算符。

WMLScript支持的比較操作符共有6種,下面被介紹一下。

1. ==。即等於操作符,它可以比較兩個操作數是否相等。如果兩個操作數相等,則返回ture,否則返回false

2. !=。即不等操作符。它可以比較兩個操作數是否相等。如果兩個操作數相等,則返回false,否則返回ture。

3. >。即大於操作等。其運算規則時,如果左操作數大於右操作數,則返回ture。


XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved