欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

WMLScript腳本程序設(shè)計(jì)_Xml教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:怎樣用XMLHTTP檢測(cè)URL及探測(cè)服務(wù)器信息
主要利用了XMLHTTP的一些方法和屬性來獲取服務(wù)器的信息。 XMLHTTP 對(duì)象方法和對(duì)象屬性附于本文后面。 關(guān)于狀態(tài)碼的問題,可以見我的另外一篇文檔《互聯(lián)網(wǎng)HTTP連接等出錯(cuò)代碼大全》 http://www.csdn.net/Develop/Article/16/16477.shtm html head title利用XM

作為一種編輯語(yǔ)言,WMLScript提供了強(qiáng)大的函數(shù)、語(yǔ)句和庫(kù)功能,以及外部編輯、訪問控制等支持,同時(shí)對(duì)程序運(yùn)行中可能產(chǎn)生的錯(cuò)誤給出了檢測(cè)手段和具體的解決辦法。這些內(nèi)容屬于WMLScript的腳本程序設(shè)計(jì)知識(shí)和進(jìn)一步的編程規(guī)定,我們本章就對(duì)此進(jìn)行詳細(xì)介紹。

  5.1 語(yǔ)句

  前面我們學(xué)習(xí)了變量、操作符和表達(dá)式,但僅由這些內(nèi)容并不能完成某個(gè)完整的功能,因?yàn)樗麄儾荒苄纬赏暾牟僮骰蛱幚沓绦颉W兞烤腿缤c嚴(yán)重的單詞,表達(dá)式如語(yǔ)言中的詞組,他們都不能表達(dá)一個(gè)完整的意思;只有語(yǔ)句,是語(yǔ)言中完整的句子,能夠表達(dá)完整的意思并實(shí)現(xiàn)某個(gè)完整的功能。WML Script提供了豐富的語(yǔ)句功能,使用這些語(yǔ)句我們可以在WML的卡片中建立交互功能和其他需要的復(fù)雜功能。

  在WML Script中,每條語(yǔ)句的后面都需要以一個(gè)分號(hào)(;)結(jié)尾。為了養(yǎng)成嚴(yán)謹(jǐn)?shù)木幊田L(fēng)格,建議大家編寫腳本時(shí),語(yǔ)句后一定要加上分號(hào)(;),這也有助于我們形成一種良好的編程習(xí)慣。

  WML Script語(yǔ)句的書寫和排列格式比較自由。我們可以在同一程序行中連續(xù)寫上多個(gè)語(yǔ)句,也可以把同一語(yǔ)句分成多行排列。WML Script將根據(jù)分號(hào)(;)來確定語(yǔ)句的具體內(nèi)容。

  WML Script的語(yǔ)句主要包括兩類。第一類是基本語(yǔ)句,如空語(yǔ)句、表達(dá)式語(yǔ)句、塊語(yǔ)句、變量語(yǔ)句和return語(yǔ)句等;第二類是條件語(yǔ)句,如if語(yǔ)句;第三類是循環(huán)語(yǔ)句,如while語(yǔ)句、for語(yǔ)句、break語(yǔ)句和continue語(yǔ)句等。下面我們分別講解這些語(yǔ)句的語(yǔ)法、功能和使用方法。

  5.1.1 基本語(yǔ)句

  WML Script基本語(yǔ)句主要用于程序格式控制和變量聲明,其中有些語(yǔ)句我們已經(jīng)不太陌生了。

  空語(yǔ)句

  空語(yǔ)句用于定義一個(gè)空的程序行,它沒有任何標(biāo)識(shí)符和操作符,也不執(zhí)行任何操作。它只是以分號(hào)(;)結(jié)束。其語(yǔ)法格式為:

  ;

  顯然,空語(yǔ)句是一種十分特殊的語(yǔ)句。由是我們?yōu)榱俗尦绦蚓哂懈玫目勺x性,通常在程序中的適當(dāng)?shù)胤郊由蠋讉(gè)空語(yǔ)句,以起到分隔或突出的作用。例如,下面的幾行程序中就含有一個(gè)空語(yǔ)句:

  str="Hello";

  val=25;

  ;

  MyVal=val*val+5;

  alert("Hi,Hi!!!");

  再如,while語(yǔ)句用于判斷一個(gè)條件并在條件滿足的時(shí)候執(zhí)行相應(yīng)的任務(wù),但如果希望條件滿足的時(shí)候什么也不作,那么就可以給它配上一個(gè)空語(yǔ)句,使之條件滿足的執(zhí)行空操作:

  while(!poll(device));

  這實(shí)際上是while語(yǔ)句和空語(yǔ)句組成的兩條語(yǔ)句。其中的分號(hào)(;)在這里就代表了空語(yǔ)句。這兩條語(yǔ)句的作用是在poll()函數(shù)為真()之前一直等待。

  表達(dá)式語(yǔ)句

  表達(dá)式語(yǔ)句用于向變量賦值,或進(jìn)行數(shù)學(xué)計(jì)算,或進(jìn)行函數(shù)調(diào)用。表達(dá)式語(yǔ)句也是我們最常用的一種語(yǔ)句,語(yǔ)法格式為:

  表達(dá)式;

  下面幾行程序都是合法的表達(dá)式語(yǔ)句:

  str="Hey"+yourName;

  val3=prevVal+4

  counter++;

  myValue1=counter,myValue2=val3

  alert("Watch out!");

  retVal=16*Lang.max(val3,counter);

  塊語(yǔ)句

  塊語(yǔ)句使用兩個(gè)花括號(hào)({ })包含一個(gè)語(yǔ)句集,形成一個(gè)語(yǔ)句體。WML Script的許多語(yǔ)句都需要使用塊語(yǔ)句來實(shí)現(xiàn)語(yǔ)句體,快語(yǔ)句的語(yǔ)法格式為:

  {

  語(yǔ)句列表;

  }

  下面的簡(jiǎn)單程序就是使用塊語(yǔ)句的例子:

  }

  vari=0;

  var x=Lang.abs(b);

  popUp("Remember!");

  }

  變量語(yǔ)句

  變量語(yǔ)句用于生命變量并可進(jìn)行變量的初始化賦值。如果用戶不賦值,那么WML Script會(huì)自動(dòng)將變量語(yǔ)句生命的變量賦予一個(gè)空字符串("")。基本的語(yǔ)法格式為:

  var 變量名;

  如果像一次生命多個(gè)變量,則相鄰變量名之間使用逗號(hào)(,)間隔,其語(yǔ)法格式為:

  VAR 變量名1,變量名2......,變量名n;

  如果想在生命變量時(shí)同時(shí)初始化變量,則可按如下語(yǔ)法格式書寫:

  var 變量名=初始化

  為便于大家更好的掌握變量語(yǔ)句,我們給出一個(gè)多出使用該語(yǔ)句的程序:

  function count(stu){

  var result=0; //聲明變量的同時(shí)初始化變量

  while(str!=""){

  var ind=0; //每次循環(huán)都初始化一次

  // 為退出循環(huán),本塊語(yǔ)句內(nèi)應(yīng)當(dāng)提供修改變量str值的語(yǔ)句

  };

  return result

  };

  function example(param){

  var a=0;

  if(param>a){

  var b=a+1; //聲明b變量的同時(shí)使用a變量初始化b變量

  }else{

  var b=a+2; //聲明c變量的同時(shí)使用a變量初始化c變量

  };

  return a; //返回a變量的值

  };

  注釋語(yǔ)句

  嚴(yán)格來講,注釋語(yǔ)句在WML Script中還不算是真正的語(yǔ)句,它只是一種前指向的規(guī)定。不過它也有嚴(yán)格的語(yǔ)法和標(biāo)注方法,所以我們這里還是像其他編程語(yǔ)言處理的一樣,把WML Script注釋方法以語(yǔ)句的形式介紹一下。

  注釋在程序執(zhí)行的時(shí)候沒有任何作用,但是可以用于對(duì)程序進(jìn)行解釋,則增強(qiáng)程序的可讀性。為了形成良好的編程風(fēng)格,我們應(yīng)該養(yǎng)成書寫注釋的良好習(xí)慣,注釋有兩種表達(dá)方式:

  (1)通過雙斜線注釋一行,這樣在雙斜先后的字符將成為注釋而不被執(zhí)行。該注釋行可以單獨(dú)一行書寫,也可以放在其他語(yǔ)句的后面。

  例如,可以進(jìn)行如下所示的注釋:

  //變量j用于小數(shù)每月的天數(shù)

  j=0; //我們這里將j賦值為0

  (2)通過符號(hào)“/*”和“*/”來規(guī)定注釋語(yǔ)句,這種注釋方式可以進(jìn)行多行注釋,符號(hào)“/*”和“*/”之間的內(nèi)容就是注釋語(yǔ)句。例如,可以進(jìn)行如下所示的多行注釋:

  /*我們定義了兩個(gè)變量:i和j。其中:

  i用于描述每年中的月數(shù),

  而j用于描述每月的天數(shù)*/

  j=0; /*我們這里將j賦值為0*/

  return語(yǔ)句

  return語(yǔ)句主要用在函數(shù)體中,在函數(shù)結(jié)束前,可以通過return語(yǔ)句,把函數(shù)處理的結(jié)果返回給調(diào)用函數(shù)的語(yǔ)句。它的語(yǔ)法格式如下:

  return表達(dá)式;

  下面的函數(shù)給出了應(yīng)用return語(yǔ)句的例子:

  function square(x){

  if(!(Lang.isFloat(x)))return invalid;

  return x*x

  };

  5.1.2 條件語(yǔ)句

  在條件語(yǔ)句中,當(dāng)滿足某種條件時(shí) ,就會(huì)執(zhí)行指定的一些代碼,而在代碼組另外某種條件時(shí),則會(huì)執(zhí)行另外一些代碼。WML Script的條件語(yǔ)句就是if...else語(yǔ)句,它的一般表達(dá)相識(shí)如下:

  if(條件){

  代碼塊1

  }

  else{

  代碼塊2

  }

  這樣,當(dāng)條件滿足時(shí),就執(zhí)行代碼塊1;如果條件不滿足則執(zhí)行代碼塊2。代碼塊和代碼塊2中如果只有一個(gè)條語(yǔ)句,那么,花括號(hào)({ })就可以省略;而如果有多條語(yǔ)句,則必須實(shí)用花括號(hào)將代碼塊包括在其中。在if...else語(yǔ)句種,其中的else部分是可選的,也就是說,我們可以使用如下的表達(dá)形式:

  if(條件){

  代碼塊

  }

  這樣,當(dāng)條件滿足時(shí),就執(zhí)行代碼塊,如果條件不滿足則什么也不做。

  例如,如果我們需要對(duì)一個(gè)學(xué)生的成績(jī)進(jìn)行判定,如果大于等于60分,那么我們就認(rèn)為該學(xué)生成績(jī)合格了,反之則認(rèn)為不合格,同時(shí)一并將狀態(tài)記錄到變量status種,相應(yīng)的WMLScript語(yǔ)句如下所示:

  if(score>=60) status="pass";

  else status="fail";

  再如,我們可以通過對(duì)天氣是否陽(yáng)光普照(sunShines)的情況進(jìn)行判斷,來給變量myDay賦值,并累計(jì)好天氣(goodDays)的天數(shù)。程序如下:

  if(sunShines) {

  myDay="Good";

  goodDays++;

  }else

  myDays="Oh well...";

  5.1.3 循環(huán)語(yǔ)句

  使用循環(huán)語(yǔ)句可以反復(fù)執(zhí)行某個(gè)代碼塊,直到循環(huán)結(jié)束條件滿足后才停止執(zhí)行。WML Script中有兩種循環(huán)語(yǔ)句:for語(yǔ)句和while語(yǔ)句,同時(shí)還有兩終于循環(huán)密切相關(guān)的操作語(yǔ)言:break語(yǔ)句和continue語(yǔ)句。

  for語(yǔ)句

  for語(yǔ)句可以創(chuàng)建一個(gè)帶條件的循環(huán),它還有3個(gè)可選的條件表達(dá)式,用于控制循環(huán)。這3個(gè)條件表達(dá)式放在一個(gè)括號(hào)里,并以分號(hào)(;)間隔。for語(yǔ)句的一般語(yǔ)法形式如下:

  for(初始表達(dá)式;循環(huán)條件;遞增表達(dá)式){

  代碼塊

  }

  for語(yǔ)句的執(zhí)行主要包括以下幾個(gè)步驟:

  (1)執(zhí)行初始表達(dá)式。在一般情況下,初始表達(dá)式完成的功能是在循環(huán)中對(duì)循環(huán)計(jì)數(shù)器賦初值。所以在這種意義上,初始表達(dá)式也可以采用“var 變量聲明列表;”的形式來定義。

  (2)判斷循環(huán)條件。如果循環(huán)條件為真(ture),則執(zhí)行循環(huán)體中的語(yǔ)句,即至步驟(3);否則,循環(huán)條件為假(false)或者invalid,就結(jié)束循環(huán);

  (3)執(zhí)行循環(huán)代碼。然后,在執(zhí)行遞增表達(dá)式。一般情況下,我們?cè)谶f增表達(dá)式中對(duì)循環(huán)計(jì)數(shù)器進(jìn)行處理,最后在返回步驟2執(zhí)行。

  例如,下面的for語(yǔ)句建立了一個(gè)循環(huán)。初始表達(dá)式為定義變量index并付初值0,循環(huán)條件為index<100,遞增表達(dá)式為每循環(huán)一次index增加1。當(dāng)index增加到100時(shí)候,循環(huán)結(jié)束。程序如下:

  for(var index=0;index<100;index++){

  count+=index;

  myFunc(count);

  };

  while 語(yǔ)句

  while語(yǔ)句也可常見一個(gè)循環(huán),它的一般語(yǔ)法表達(dá)式如下:

  while(循環(huán)條件){

  代碼塊

  }

  while語(yǔ)句的執(zhí)行過程包括以下幾個(gè)步驟:

  (1)判斷循環(huán)條件是否為真。如果循環(huán)條件為真,則執(zhí)行循環(huán);如果為假或?yàn)閕nvalid,則跳出循環(huán)。

  (2)執(zhí)行循環(huán)中的代碼塊,然后返回步驟(1)

  下面的程序就是使用while語(yǔ)句的簡(jiǎn)單例子:

  var counter=0

  var total=0

  while(counter<3){

  counter++;

  total+=c;

  };

  其中建立的循環(huán)僅當(dāng)變量counter的值小于3時(shí)執(zhí)行,否則就結(jié)束循環(huán)。

  顯然,如果循環(huán)條件不能為假或?yàn)閕nvalid,那么while循環(huán)就會(huì)無休止的反復(fù)執(zhí)行下去。因此,我們?cè)诖a塊中一定要有能夠改變循環(huán)條件的變量,否則,就很有可能會(huì)陷入死循環(huán)而不能終止程序,下面就是一個(gè)死循環(huán)的例子:

  var x=1;

  var y=0;

  while(x<=1){

  y=x+1;

  }

  這個(gè)程序中,因?yàn)樽兞縳的值在循環(huán)中不能發(fā)生變化,所以循環(huán)條件在判斷的時(shí)候永遠(yuǎn)為真,所以成為了死循環(huán)。因此,對(duì)于while語(yǔ)句我們往往使用如下所示的語(yǔ)法形式:

  初始表達(dá)式

  while(循環(huán)條件){

  代碼塊

  遞增表達(dá)式

  }

  這種情況下,while語(yǔ)句的功能和for語(yǔ)句的功能就一樣了,不過用while語(yǔ)句編寫的程序可讀性更強(qiáng)一些。所以我們也可以采用while語(yǔ)句來完成index增加到100的循環(huán)。

  程序如下:

  var index=0

  while (index<100){

  counter+=index;

  myFunc(count);

  index++;

  };

  break語(yǔ)句

  為了更好的解決死循環(huán)問題,WML Script項(xiàng)大多數(shù)編成語(yǔ)言一樣提供了break語(yǔ)句。break語(yǔ)句可以使程序執(zhí)行跳出循環(huán)。不論是for語(yǔ)句還是while語(yǔ)句,只要在循環(huán)中使用了break語(yǔ)句,那么程序執(zhí)行到break語(yǔ)句后就立即跳出當(dāng)前循環(huán),然后繼續(xù)執(zhí)行下去。

  break語(yǔ)句的予發(fā)行時(shí)如下:

  break;

  例如,在下面的函數(shù)中我們使用了break語(yǔ)句,它是當(dāng)index=3時(shí)跳出循環(huán)。如果不是用該語(yǔ)句,函數(shù)中的while循環(huán)直到index=6時(shí)才可以結(jié)束。程序如下:

  funcition testBreak(x){

  var index=0;

  while(index<6){

  if(index==3)break;

  index++

  };

  retrun index*x;

  ;

  continue語(yǔ)句

  continue語(yǔ)句的功能和break語(yǔ)句的功能看起來有些類似,但實(shí)際上卻不一樣。循環(huán)執(zhí)行時(shí)遇到break語(yǔ)句通常是跳出當(dāng)前循環(huán),但循環(huán)執(zhí)行到continue語(yǔ)句并不跳出當(dāng)前循環(huán),而是不執(zhí)行循環(huán)中在continue語(yǔ)句后面的代碼塊,直接結(jié)束循環(huán)的本輪運(yùn)行,然后馬上開始下一輪循環(huán)的運(yùn)行。

  在while語(yǔ)句的循環(huán)中,遇到continue語(yǔ)句后,程序會(huì)直接判斷循環(huán)條件從而開始下一輪循環(huán)。在for語(yǔ)句的循環(huán)中,遇到continue語(yǔ)句后程序會(huì)直接執(zhí)行遞增表達(dá)式,然后判斷循環(huán)條件從而開始下一輪循環(huán)。

  例如,我們想利用for循環(huán)求1到10之間偶數(shù)的和,其WML Script語(yǔ)句如下:

  var sum=0;

  for (var j=1;j<=10;j++){

  if(j%2!=0)

  continue;

  sun+j;

  };

  在這個(gè)例子中,在j%2!=0的情況下,也就是j為奇數(shù)的情況下,程序執(zhí)行continue語(yǔ)句,這時(shí),并沒有如同break語(yǔ)句一樣跳出循環(huán)的運(yùn)行,而是不執(zhí)行循環(huán)中后面的語(yǔ)句而直接執(zhí)行遞增表達(dá)式開始下一輪循環(huán)的執(zhí)行,這樣,就可以不將其數(shù)j的之類即如總和中。

  再如,我們想利用while循環(huán)求0到4之間出3以外幾個(gè)數(shù)的和,則可以使用continue語(yǔ)句進(jìn)行控制。程序如下;

  var index=0;

  var count=0;

  while (index<5){

  index++;

  if(index==3)

  continue;

  cont+=index;

  };

  這以程序中,當(dāng)index等于3時(shí),“index==3”為真,所以執(zhí)行continue語(yǔ)句,不再把此時(shí)index的值加大count中,而是開始下一輪的循環(huán)。

  5.2 函數(shù)的聲明與調(diào)用

  在WML Script中,函數(shù)是一種能夠完成某種功能的代碼塊,并可以在腳本中被事件處理或被其他語(yǔ)句調(diào)用,也可以被WML程序所處理和調(diào)用。一般地,當(dāng)我們編寫WML Script腳本時(shí),如果腳本中的代碼長(zhǎng)度還是很長(zhǎng),則一般還可以根據(jù)功能將函數(shù)再進(jìn)行劃分,分成為幾個(gè)功能更加單一的函數(shù)。雖然說這樣對(duì)長(zhǎng)代碼的處理方法并不是編寫腳本程序的強(qiáng)制性要求,但通過函數(shù)的劃分和運(yùn)用,我們可以使得WML Script腳本具有更好的可讀性,也便于我們對(duì)腳本程序的編寫與調(diào)試。而且,如果在某些腳本中有多處完全相同的代碼塊,那么我們也可以將這些代碼快些為一個(gè)函數(shù),然后在腳本中調(diào)用這個(gè)函數(shù),從而提高代碼的重要性,簡(jiǎn)化代碼的編寫工作。

  WML Script的函數(shù)共用和Jave語(yǔ)言、C/C++語(yǔ)言的函數(shù)有所不同。我們知道,Jave語(yǔ)言、C/C++語(yǔ)言中有函數(shù)和過程之分,函數(shù)能夠完成一定的功能并有返回值,而過程進(jìn)可完成一定的功能但沒有返回值。可是,WML Script中并不區(qū)分函數(shù)和過程,因?yàn)樗挥泻瘮?shù),沒有過程。WML Script的函數(shù)完成一定功能后始終有返回值,不過返回值分兩種情況,即非空的返回值和空字符串("")形式的返回值。前者是真正的返回值,后者其實(shí)相當(dāng)于沒有返回值。也就是說,WML Script中的函數(shù)同時(shí)具有其他語(yǔ)言中的函數(shù)和過程的功能。

  5.2.1 函數(shù)的聲明

  使用函數(shù)時(shí),要根據(jù)函數(shù)的調(diào)用使用,而調(diào)用函數(shù)前必須聲明函數(shù),也就是需要先定義函數(shù)。WML Script中定義函數(shù)的一般方式如下:

  function函數(shù)名(參數(shù)列表)

  {

  代碼塊

  };

  另外,WML Script規(guī)定使用extern關(guān)鍵字來聲明一個(gè)外部函數(shù):

  extern function函數(shù)名(參數(shù)列表)

  {

  代碼塊

  };

  從中可以看出,函數(shù)的定義有以下3部分組成:

  (1)函數(shù)名。即函數(shù)的名稱,其命名規(guī)則應(yīng)遵守WML Script的標(biāo)識(shí)規(guī)則。調(diào)用函數(shù)時(shí)都是通過函數(shù)名進(jìn)行調(diào)用的,所以函數(shù)必須要有函數(shù)名。

  函數(shù)命名時(shí),一般要使用能夠描述函數(shù)功能的但此來作為函數(shù)名,也可以使用多個(gè)單詞組合進(jìn)行命名,這樣做的好處是能夠提高WML Script腳本的可讀性。

  函數(shù)名在同一個(gè)WML Script腳本文件里必須是唯一的。如若不然,則會(huì)導(dǎo)致函數(shù)定義混亂。

  (2)參數(shù)列表。即調(diào)用函數(shù)時(shí)需要的參數(shù)。參數(shù)列表通常是可選的,有的函數(shù)需要,有的函數(shù)可能不需要。參數(shù)列表的作用是向函數(shù)傳遞一些參數(shù),使得函數(shù)可以直接使用這些參數(shù)的值。

  調(diào)用函數(shù)的時(shí)候,參數(shù)個(gè)數(shù)和類型必須和函數(shù)定義示所聲明的參數(shù)個(gè)數(shù)即類型保持一致。而且函數(shù)的參數(shù)就如同似函數(shù)體內(nèi)的局部變量,它們?cè)诤瘮?shù)調(diào)用的時(shí)候被初始化。

  (3)代碼塊。它是函數(shù)的主體部分。代碼塊中的代碼包含在以對(duì)花括號(hào)({ })中,代碼塊可以執(zhí)行并完成函數(shù)的功能。編寫代碼塊是應(yīng)當(dāng)遵循WML Script的編程規(guī)則。

  有時(shí),函數(shù)需要返回一個(gè)值給調(diào)用函數(shù)的語(yǔ)句,則應(yīng)該在代碼塊的后面一行使用return語(yǔ)句,返回所需的數(shù)值。

  與C/C++等語(yǔ)言類似,WML Script的函數(shù)是可以嵌套的,以就是說,在一個(gè)函數(shù)中還可以調(diào)用其他函數(shù)。但是,函數(shù)聲明是不能嵌套,這是WML Script的強(qiáng)制性規(guī)定。

  下面幾行語(yǔ)句就是定義函數(shù)的簡(jiǎn)單例子:

  function currencyConverter(currency,exchangeRate)

  {

  return currency*exchangeRate;

  };

  其中,該函數(shù)的名稱為currencyConverter,參數(shù)有currency和exchangeRate兩個(gè),函數(shù)代碼塊包含一條語(yǔ)句,用于返回currency和exchangeRate的乘積。

  下面是一個(gè)使用extern定義外部函數(shù)的例子。其中函數(shù)名為textIt,它沒有參數(shù),函數(shù)體中定義了兩個(gè)賦值變量,一個(gè)賦整數(shù),一個(gè)賦函數(shù)值:

  extern function testIt(){

  var USD=10;

  var FIM =currencyConverter(USD,5.3)

  };

  5.2.2 函數(shù)的調(diào)用

  編寫好的函數(shù)必須經(jīng)過合法的調(diào)用,才可以發(fā)揮它應(yīng)用的作用。函數(shù)調(diào)用將返回一個(gè)值,比如一個(gè)計(jì)算結(jié)果。WML Script中的函數(shù)主要可以分為內(nèi)部函數(shù)、外部函數(shù)和庫(kù)函數(shù),下面我們就介紹這3類函數(shù)的調(diào)用方法。

  內(nèi)部函數(shù)

  所謂內(nèi)部函數(shù)是指函數(shù)的定義與其調(diào)用函數(shù)在同一個(gè)腳本文件內(nèi)的函數(shù),對(duì)內(nèi)部函數(shù)的調(diào)用稱為內(nèi)部調(diào)用。內(nèi)部函數(shù)的調(diào)用非常簡(jiǎn)單,只需提供函數(shù)名和所需參數(shù)值即可,參數(shù)值必須和函數(shù)定義時(shí)指定的參數(shù)個(gè)數(shù)即類型一致。而且函數(shù)調(diào)用需要使用操作符來接收或處理被調(diào)用的返回值。

  內(nèi)部函數(shù)可以在其定義之前調(diào)用,也可以在其定義之后調(diào)用。例如,下面就是一個(gè)在函數(shù)定義之后調(diào)用的例子。

  function test1(val){

  return val*val;

  };

  function test2(param){

  return test1(param+1);

  };

  這個(gè)例子中定義了兩個(gè)函數(shù)test1和test2。test1函數(shù)用于計(jì)算給定參數(shù)值的平方并將結(jié)果返回;test2函數(shù)將給定的參數(shù)值加1,然后這個(gè)和為參數(shù)值,來調(diào)用test1函數(shù),得到結(jié)果后在將給結(jié)果返回到調(diào)用test2函數(shù)的語(yǔ)句。

  注意,本例中test2函數(shù)調(diào)用了test1函數(shù),這種在函數(shù)中調(diào)用其他函數(shù)的方法稱為函數(shù)調(diào)用嵌套。WML Script的內(nèi)部函數(shù)、外部函數(shù)和庫(kù)函數(shù)都支持嵌套調(diào)用,后面我們專門介紹這方面的內(nèi)容。

  外部函數(shù)

  外部函數(shù)使一個(gè)在WML Scrupt外部文件中定義的函數(shù)。調(diào)用外部函數(shù)的方法與調(diào)用內(nèi)部函數(shù)的方法基本類似,不同之處在于調(diào)用處外部函數(shù)時(shí)一是要指定外部文件的地址即名稱,二是要在調(diào)用的外部函數(shù)名的前面加上外部文件的名稱。

  WML Script規(guī)則使用use url來指定外部文件,語(yǔ)法格式為:

  use url還有外部函數(shù)的外部文件名 外部文件所在的URL;

  這樣,WML Script的預(yù)編譯頭就可以將外部文件映射為一個(gè)可以在內(nèi)部使用的標(biāo)識(shí)。然后,使用這個(gè)標(biāo)識(shí)并加上井號(hào)鍵(#)和標(biāo)準(zhǔn)的函數(shù)調(diào)用即可實(shí)現(xiàn)外部函數(shù)調(diào)用,語(yǔ)法格式為:

  外部文件名#外部函數(shù)(參數(shù)列表);

  例如,http://www.host.com/script下有我們需要的外部文件,名為OtherScript,所以我們可使用use url來指定該文件:

  use url OtherScript"http://www.host.com/script"

  這一外部文件中含有我們需要調(diào)用的外部函數(shù)testme,則可采用“外部文件名#外部函數(shù)(參數(shù)列表)”的形式來調(diào)用它:

  OtherScript#testme(param+1);

  這個(gè)例子完整的寫出來,就是下面的程序:

  use url OtherScript"http://www.host.com/script"

  function test(param){

  return OtherScript#testme(param+1);

  };

  庫(kù)函數(shù)

  特別指定,WML Script的庫(kù)函數(shù)一律是指它的標(biāo)準(zhǔn)庫(kù)函數(shù)。因?yàn)榕c標(biāo)準(zhǔn)庫(kù)函數(shù)對(duì)應(yīng),WML Script還有一些非標(biāo)準(zhǔn)的庫(kù)函數(shù)。我們這里先介紹標(biāo)準(zhǔn)庫(kù)函數(shù),非標(biāo)準(zhǔn)庫(kù)函數(shù)后面再介紹。

  所有庫(kù)函數(shù)都有所數(shù)的庫(kù),函數(shù)的庫(kù)中通常含有一類函數(shù)。因此,調(diào)用某個(gè)庫(kù)函數(shù)時(shí),一要指定它的庫(kù)名,二要指定它的函數(shù)名。WML Script規(guī)定,調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)時(shí)可以通過在函數(shù)庫(kù)的名字后面加上句點(diǎn)號(hào)(.)和庫(kù)函數(shù)的標(biāo)準(zhǔn)調(diào)用來實(shí)現(xiàn),語(yǔ)法格式為:

  函數(shù)庫(kù)名.函數(shù)名(參數(shù)列表);

  例如,WML Script的浮點(diǎn)庫(kù)即Float庫(kù)中有一個(gè)開根方的函數(shù)sqrt,該函數(shù)只有一個(gè)參數(shù),那么調(diào)用squrt庫(kù)函數(shù)的方法為:

  Float.sqrt(number);//這里要求number大于或等于0

  下面給出了調(diào)用庫(kù)函數(shù)的簡(jiǎn)單例子。首先一param參數(shù)值調(diào)用Lang.abs()函數(shù),返回結(jié)果加1后再作為參數(shù)調(diào)用Float.sqrt()函數(shù),它的返回結(jié)果作為內(nèi)部函數(shù)test的返回值:

  function test(param){

  return Float.sqrt(Lang.abs(param)+1);

  };

  2.3 函數(shù)的嵌套調(diào)用

  WML Script的函數(shù)定義都是互相平行、獨(dú)立的,定義函數(shù)的時(shí)候我們不能在一個(gè)函數(shù)內(nèi)定義另外一個(gè)函數(shù),也就是說,函數(shù)定義是不能嵌套的。但是,函數(shù)調(diào)用確是可以嵌套的,也就是說,我們可以在調(diào)用一個(gè)函數(shù)的過程中調(diào)用另外一個(gè)函數(shù)。

  它的執(zhí)行過程是:

  (1)執(zhí)行a函數(shù)開頭部分;

  (2)遇到調(diào)用b函數(shù)的操作語(yǔ)句,流程則專區(qū)執(zhí)行b函數(shù);

  (3)執(zhí)行b函數(shù)開頭部分;

  (4)遇到調(diào)用c函數(shù)的操作語(yǔ)句,流程則專區(qū)執(zhí)行c函數(shù);

  (5)執(zhí)行b函數(shù),如果沒有其他嵌套的函數(shù),則完成c函數(shù)的全部操作;

  (6)返回調(diào)用c函數(shù)的語(yǔ)句,即返回到b函數(shù);

  (7)繼續(xù)執(zhí)行b函數(shù)中尚未執(zhí)行的操作,直到b函數(shù)結(jié)束;

  (8)返回a函數(shù)中調(diào)用b函數(shù)的語(yǔ)句;

  (9)繼續(xù)執(zhí)行a函數(shù)的剩余操作,直到函數(shù)結(jié)束。

  function myFunC(param1){

  return param1*param1=Float.squt(Lang.abs(param)+1);

  };

  function myFunB(param0){

  return myFunC(param0+1)*|param0+12;

  };

  function myFunA(param){

  return myFunB(param*param+1);

  };

  5.3 預(yù)編譯

  WML Script的預(yù)編譯主要用于在編譯階段控制編譯器的行為。與編譯頭一般在文件開頭和函數(shù)聲明之前指定,WML Script規(guī)定所有的預(yù)編譯頭都是一關(guān)鍵詞use加上指定的預(yù)編譯屬性進(jìn)行指定。

  在大多數(shù)的編程中,我們比較長(zhǎng)用的預(yù)編譯行為主要涉及外部文件聲明、訪問權(quán)和Meta信息設(shè)置。

  5.3.1 外部文件

  我們知道,使用URL地址可以定位一個(gè)WML Script文件。利用該URL地址;在WML Script編程中我們可以通過預(yù)編譯來調(diào)用WML Script的外部文件,外部文件預(yù)編譯頭的聲明方法是use url,其語(yǔ)法格式如下:

  use url外部文件名 "URL"地址

  這樣,我們?cè)诋?dāng)前文件的編程中就可以使用該預(yù)編譯頭聲明的外部文件,從而可以調(diào)用該外部文件的函數(shù)。其語(yǔ)法格式為:

  外部文件名#函數(shù)名(參數(shù)列表);

  例如,我們希望在當(dāng)前的WML Script程序中調(diào)用OtherScript外部文件中的check()函數(shù),而且我們知道OtherScript文件的URL地址為http://www.host.com/app/script。因此,我們可以使用use url來聲明這一外部文件:

  use url OtherScript"http://www.host.com/script"

  隨后,我們就可以在程序中調(diào)用OtherScript中的check()函數(shù)了:

  function test(par1,par2)

  {

  return OtherScript#check(par1,parr2);

  };

  其中調(diào)用執(zhí)行的過程如下:

  (1)找到WML Script外部文件的URL地址;

  (2)當(dāng)前函數(shù)從指定的URL地址值裝載外部文件;

  (3)檢測(cè)外部文件的內(nèi)容,并執(zhí)行其中的check()函數(shù)。

  ure url 預(yù)編譯頭指定的外部文件名在當(dāng)前程序中必須唯一,用戶不能指定不同URL地址的同名外部文件,否則在調(diào)用外部文件時(shí)就會(huì)發(fā)生混亂。

  另外,use url預(yù)編譯頭中的URL地址也可以是相對(duì)URL地址。相對(duì)URL的起始位置是當(dāng)前程序文件所在的位置,并在此基礎(chǔ)上根據(jù)URL進(jìn)行定位。

  如果URL地址中的字符包含有轉(zhuǎn)義字符,則WML Script將根據(jù)轉(zhuǎn)義要求進(jìn)行轉(zhuǎn)義。不過,程序在編譯的時(shí)候編譯器并不會(huì)對(duì)他們進(jìn)行轉(zhuǎn)義,而是在程序執(zhí)行時(shí)完成,檢查URL格式和URL地址的有效性。

  5.3.2 訪問權(quán)限

  我們可以使用訪問權(quán)限預(yù)編譯設(shè)保護(hù)文件的內(nèi)容,實(shí)現(xiàn)訪問控制。WML Script編程中,必須在調(diào)用外部函數(shù)之前使用訪問權(quán)限預(yù)編譯頭聲明外部文件的訪問權(quán)限。不過,WML Script訪問權(quán)限檢查的缺省值是不進(jìn)行檢查,即disabled.但訪問權(quán)限一經(jīng)聲明,以后當(dāng)調(diào)用外部函數(shù)的時(shí)候,編譯器就會(huì)檢查外部文件的訪問權(quán)限,以決定調(diào)用這是否有權(quán)使用該文件及其內(nèi)含函數(shù)。

  訪問權(quán)限預(yù)編譯頭的聲明方法是use access,其語(yǔ)法格式如下:

  use access domain操作域名 path操作路徑:

  訪問權(quán)限預(yù)編譯頭通過指定domain和path屬性來決定編譯器將要進(jìn)行什么樣的檢查工作。如果文件有domain或者path屬性,那么文件所在的URL就必須和屬性中的值一致。比較時(shí),域和路徑都依據(jù)URL大寫規(guī)則進(jìn)行比較。具體的比較預(yù)則如下:

  (1)操作域與URL中的域后綴相匹配。與后綴匹配是值所有的子域從后向前都必須一致。例如:www.wapforum.org和wapforum.org相匹配,而與forum.org并不匹配。

  (2)操作路徑和URL中的路徑前綴相匹配。路徑前綴匹配是值從前向后必須一致。例如:“/X/Y”與“/X”相匹配,而不是和“/XZ”相匹配。

  (3)卻省的domain數(shù)行為當(dāng)前的文件域,就是“/”。

  不過,為了簡(jiǎn)化編程,有時(shí)WMLScript并不需要直到外部文件的絕對(duì)路徑,我們只需提供文件的相對(duì)URL即可,用戶瀏覽器執(zhí)行程序是卡相對(duì)路徑自動(dòng)轉(zhuǎn)換為絕對(duì)路徑,根據(jù)路徑屬性進(jìn)行匹配。例如:如果訪問權(quán)限預(yù)編譯頭及其指定屬性為:

  use access domain"wapforum.org"path"/finance";

  則可以使用以下的路徑來調(diào)用指定文件中的外部函數(shù),它們都符合相對(duì)URL地址匹配規(guī)則:

  http://wapforum.org/finance/money.cgi

  http://www. wapforum.org/finance/money.cgi

  http://www. wapforum.org/finance/demos/packages.cgi?x+123&y+456

  而以下的路徑調(diào)用則非法的,因?yàn)樗鼈兓蛘卟僮饔虿粚?duì),或者URL地址不能與指定的相對(duì)URL相匹配:

  heep//www.test.net/finance

  http//www.qapforum.org/internal/foo.wml

  需要強(qiáng)調(diào)指出的是,WML Script規(guī)定,同一程序中只能定義一個(gè)訪問權(quán)限與編譯頭,否則就會(huì)導(dǎo)致編譯錯(cuò)誤。

  5.3.3 Meta 信息

  我們還可以通過與編譯頭的形式聲明WML Script文件的Meta信息。Meta信息主要用于指定文件所需Mete屬性的屬性名(Property name)、屬性值(Content)以及文件的配置(信息),屬性都屬于字符串類型的數(shù)據(jù)。Mate信息域編譯頭使用use meta聲明,其語(yǔ)法格式為:

  usr meta 屬性 該屬性Meta信息:

  Meta的屬性主要包括Name、HTTP Equiv和User Agent三種,下面我們分別講解它們的聲明方法:

  (1)Name。該屬性用于指定服務(wù)器使用的Meta信息。這些信息僅供服務(wù)使用,用戶瀏覽器并不理會(huì)這些信息。

  例如,以下Name屬性的Meta信息指定了服務(wù)器的創(chuàng)建時(shí)間:

  use meta name "Created""26-June-2000";

  該信息只會(huì)作用于服務(wù)器,而不會(huì)影響用戶瀏覽器的操作。

  (2)HTTP Equiv。該屬性用于指定需要解釋為HTTP頭的Meta信息。對(duì)于已經(jīng)編譯的文件來說,當(dāng)它到達(dá)用戶瀏覽器前,WML Script將根據(jù)HTTP Equiv屬性指定的Meta信息將文件轉(zhuǎn)換為WSP或HTTP的響應(yīng)頭,進(jìn)行文件的解釋和執(zhí)行。

  例如,以下聲明的http equiv屬性指定按照腳本語(yǔ)言的關(guān)鍵字來解釋當(dāng)前文件:

  use meta http equiv"Keywords""Script,Language";

  (3)User Agent。該屬性用于定義用戶瀏覽器使用的數(shù)據(jù)類型。例如:

  use meta user agent"Type""Test";

  它指定當(dāng)前數(shù)據(jù)必須立即發(fā)送給用戶瀏覽器,然后馬上清除掉。

  5.4 執(zhí)行時(shí)的錯(cuò)誤檢測(cè)與處理

  WML Script函數(shù)的功能提供用戶服務(wù),并希望用戶界面能在任何的狀況下運(yùn)作順利,因此錯(cuò)誤的處理是最大的課題,這表示了語(yǔ)言可能不提供預(yù)期的機(jī)制,如他應(yīng)該可以防止錯(cuò)誤發(fā)生或提醒用戶注意并采取適當(dāng)?shù)膭?dòng)作,種植儲(chǔ)蓄執(zhí)行是最后的手段。下面幾個(gè)小節(jié)列出了當(dāng)為碼下載并執(zhí)行時(shí)會(huì)發(fā)生的錯(cuò)誤,一些程序上的錯(cuò)誤并不在談?wù)摰姆秶?如無窮循環(huán)),像這類的例子就需要手動(dòng)來終止。

  5.4.1 錯(cuò)誤檢測(cè)

  錯(cuò)誤檢測(cè)工具能讓你檢測(cè)錯(cuò)誤但會(huì)干擾系統(tǒng)的動(dòng)作,因?yàn)閃ML Script是弱格式語(yǔ)言,所以由一些特殊功能的工具來檢測(cè)有invalid數(shù)據(jù)格式所引起的錯(cuò)誤:

  檢測(cè)給定的變量包含的是正確值:WML Scritp含有格式確認(rèn)函數(shù)庫(kù)程序如:Lang.isInt()Lang.isFloat()、Lang.parseInt()、Lang.parseFloat。

  檢測(cè)給定的變量包含的只是正確的格式:WMLScript含有運(yùn)算符typeof與isvalid能讓你使用。

  5.4.2錯(cuò)誤處理

  錯(cuò)誤處理是在發(fā)生錯(cuò)誤之后,有些狀況是錯(cuò)誤檢測(cè)無法防止的,如內(nèi)存限制后外部信號(hào)等,或者是數(shù)據(jù)很難處理,如溢出(overflow)或虧失(underflow),而這些狀況可以分為兩類:

  嚴(yán)重錯(cuò)誤(fatalerror):這種錯(cuò)誤會(huì)造成程序終止,因?yàn)閃ML Scritp程序會(huì)讓一些用戶界面調(diào)用,程序終止通常會(huì)跟調(diào)用它的用戶界面發(fā)出信號(hào),用戶界面就會(huì)告知用戶這個(gè)錯(cuò)誤。

  錯(cuò)誤(non-fatalerrow):這種錯(cuò)誤會(huì)把信號(hào)傳回程序,如一些特殊的值,然后由程序決定所要采取的行動(dòng)。

  下列的錯(cuò)誤是根據(jù)他們的嚴(yán)重性來區(qū)分。

  5.4.3 嚴(yán)重錯(cuò)誤(fatalerror)

  下面的小節(jié)會(huì)討論WML Script的嚴(yán)重錯(cuò)誤。

  位碼錯(cuò)誤(bytedode error)

  這些錯(cuò)誤跟位碼與由WML Script位碼解譯器所執(zhí)行的指令有關(guān)他們指出了錯(cuò)誤的元素群、無效的指令、指令所使用的參數(shù)無效,或指令無法執(zhí)行。

  驗(yàn)證錯(cuò)誤(verification failed)

  說明:調(diào)用的程序中的特定位碼無法通過驗(yàn)證。

  如何發(fā)生:每次程序試著用外部程序。

  范例:var a = 3*OtherScript#doThis(param)

  嚴(yán)重性:嚴(yán)重。

  判定狀況:當(dāng)檢測(cè)位碼驗(yàn)證式。

  解決方法:終止程序與WML Script解譯其調(diào)用者的錯(cuò)誤信號(hào)。

  說明:調(diào)用一個(gè)函數(shù)庫(kù)程序時(shí)發(fā)生嚴(yán)重錯(cuò)誤。

  如何發(fā)生:每次調(diào)用函數(shù)庫(kù)程序。

  范例:var a = string.format(param)

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方法:終止程序與WML Script解譯其調(diào)用者的錯(cuò)誤信號(hào)。

  說明:調(diào)用函數(shù)參數(shù)的數(shù)目跟被調(diào)用函數(shù)的參數(shù)數(shù)目不符合。

  如何發(fā)生:調(diào)用外部程序。

  范例:編譯器參生一個(gè)無效的參數(shù)給予指令使用,或者被調(diào)用的程序參數(shù)數(shù)目改變了。

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  嚴(yán)重性:嚴(yán)重。

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  說明: 在特定的程序中找不到所需要的外部程序。

  如何發(fā)生:調(diào)用外部程序。

  范例: var a =3*OtherScript#doThis(param)

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  說明: 由于在網(wǎng)絡(luò)服務(wù)器的程序存取又無法修復(fù)的錯(cuò)誤或特定程序并不在網(wǎng)絡(luò)服務(wù)器中所引起的程序無法載入。

  如何發(fā)生:調(diào)用外部程序。

  范例: var a =3*OtherScript#doThis(param)

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  說明: 存取錯(cuò)誤,所調(diào)用的外部程序加了保護(hù)。

  如何發(fā)生:調(diào)用外部程序

  范例:var a =3*OtherScript#doThis(param)

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  說明: 因?yàn)槌绦蝈e(cuò)誤造成stack underflow。

  如何發(fā)生:程序要取出(pop)一個(gè)空堆

  范例: 當(dāng)組譯器產(chǎn)生錯(cuò)誤碼。

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  說明:執(zhí)行調(diào)用Lang.abort() 是發(fā)生的錯(cuò)誤。

  如何發(fā)生:每當(dāng)程序調(diào)用Lang.abort()函數(shù)。

  范例: Lang.abort("unrecoverable error")

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  說明:發(fā)生堆棧溢出。

  如何發(fā)生:程序資源太多或要推入太多的變量到運(yùn)算之中。

  范例: function f|(x)(f(x+1););

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  說明:沒有多余的內(nèi)存可供解譯器使用。

  如何發(fā)生:作業(yè)系統(tǒng)無法配置多余的空間給解譯器適使用。

  范例: function f(x){

  x=x+"abcdefghijklmnopqrstuvxyz";

  f(x) ;

  };

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  說明:用戶終止程序的執(zhí)行(如按下reset鈕)

  如何發(fā)生:隨時(shí)。

  范例: 當(dāng)應(yīng)用程序正在執(zhí)行是用戶按下reset鈕。

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  說明:當(dāng)程序執(zhí)行中,發(fā)生了外部嚴(yán)重的錯(cuò)誤。

  如何發(fā)生:隨時(shí)。

  范例: 電力微弱,系統(tǒng)自動(dòng)。

  嚴(yán)重性:嚴(yán)重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

  5.4.4 一般錯(cuò)誤(Nonfatal error)

  下面說明了WML Script的一般錯(cuò)誤:

  計(jì)算錯(cuò)誤(computational error)

  這些錯(cuò)誤是由于WML Script數(shù)學(xué)上的運(yùn)算所造成。

  除以零(divide by zero)

  說明:發(fā)生了除以零的狀況

  如何發(fā)生:當(dāng)程序中有除以零的狀況。

  范例:var a= 10;

  var b= 0;

  var x= a/b;

  var y= a div b;

  var z= a%b;

  a/=b;

  嚴(yán)重性: 一般。

  判定狀況:高

  解決方案:產(chǎn)生結(jié)果為invalid。

  說明:發(fā)生了除以零的狀況

  如何發(fā)生:程序要執(zhí)行浮點(diǎn)數(shù)運(yùn)算。

  范例:var a = Float.precision();

  var b = Float.precision();

  var c = a* b

  嚴(yán)重性:一般。

  判定狀況:高,在某些狀況很困難。

  解決方法:產(chǎn)生的結(jié)果為浮點(diǎn)數(shù)值0.0

  常數(shù)參考錯(cuò)誤(constant reference error)

  說明:所參考的浮點(diǎn)數(shù)實(shí)字為not a number。

  如何發(fā)生:程序試著存取一個(gè)浮點(diǎn)數(shù)實(shí)字但組譯器產(chǎn)生了not a number的浮點(diǎn)數(shù)常數(shù)。

  范例:參考浮點(diǎn)數(shù)常數(shù)。

  嚴(yán)重性:一般。

  判定狀況:高

  解決方法:這會(huì)產(chǎn)生invalid值。

  說明:參考的浮點(diǎn)數(shù)實(shí)字不是正無窮大就是負(fù)無窮大的浮點(diǎn)數(shù)常數(shù)。

  如何發(fā)生:程序試著存取一個(gè)浮點(diǎn)數(shù)實(shí)字但組譯器產(chǎn)生了正無窮大或負(fù)無窮大的浮點(diǎn)數(shù)常數(shù)。

  范例:參考浮點(diǎn)數(shù)常數(shù)。

  嚴(yán)重性:一般。

  判定狀況:高

  解決方法:這會(huì)產(chǎn)生invalid值。

  說明:需要參照浮點(diǎn)數(shù)值所發(fā)生的錯(cuò)誤。

  如何發(fā)生:程序需要使用浮點(diǎn)數(shù)值但環(huán)境值支持整數(shù)值。

  范例:var a = 3.14;

  嚴(yán)重性:一般

  判定狀況:高

  解決方法:這會(huì)產(chǎn)生invalid值。

  轉(zhuǎn)換錯(cuò)誤

  這個(gè)錯(cuò)誤的發(fā)生同WML Script所支持的自動(dòng)轉(zhuǎn)換有關(guān)。

  說明:欲轉(zhuǎn)換成整數(shù)值,但這個(gè)值超過整數(shù)所能接受的范圍(正或負(fù))。

  如何發(fā)生:程序試著自動(dòng)轉(zhuǎn)換成整數(shù)時(shí)。

  范例: var a = -"99999999999999999999999999999999999999999";

  嚴(yán)重性:一般

  判定狀況:高

  解決方法:這會(huì)產(chǎn)生invalid值。

  說明:欲轉(zhuǎn)換成浮點(diǎn)數(shù),但這個(gè)值小于浮點(diǎn)數(shù)所能接受的范圍(正或負(fù))。

  如何發(fā)生:程序時(shí)值自動(dòng)轉(zhuǎn)換成浮點(diǎn)數(shù)時(shí)。

  范例:var a = -"99999999999999999999999999999999999999999";

  嚴(yán)重性:一般

  判定狀況:高

  解決方法:這會(huì)產(chǎn)生invalid值。

  說明:欲轉(zhuǎn)換成浮點(diǎn)數(shù),但這個(gè)值小于浮點(diǎn)數(shù)所能接受的范圍(正或負(fù))。

  如何發(fā)生:程序時(shí)值自動(dòng)轉(zhuǎn)換成浮點(diǎn)數(shù)時(shí)。

  范例:var a = -"99999999999999999999999999999999999999999";

  嚴(yán)重性:一般

  判定狀況:高

  解決方法:這會(huì)產(chǎn)生浮點(diǎn)數(shù)0.0。

  6.5 URL函數(shù)庫(kù)

  名稱:URL

  說明:這個(gè)函數(shù)庫(kù)包含了處理絕對(duì)的URL與相對(duì)URL的程序,一般的URL語(yǔ)法如下:://:/;?#

  isValid

  程序:isValid(url)

  說明:如果給予的url值是正確的URL語(yǔ)法,則回傳ture,否則回傳false

  絕對(duì)與相關(guān)URL都能支持

  相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

  參數(shù):url=字符串

  回傳值:布爾值或invalid

  例外狀況:無

  范例:var a=URL.isValid

  ("http://www.acme.com/script#func()"); //a=ture

  var b=URL.isValid("../common#test()"); //b=ture

  var c=URL.isValid

  ("experimental?://www.acme.com/pub"); //c=false

  getScheme

  程序:getScheme(url)

  說明:回傳給予url的調(diào)用方式scheme

  絕對(duì)與相關(guān)URL都能支持

  相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

  參數(shù):url=字符串

  回傳值:字符串或invalid

  例外狀況:如果遇到不正確的URL語(yǔ)法,則回傳invalid

  范例:var a=URL.geScheme("http://w.a.com"); //a="http"

  var b=URL.getSceme("w.a.com"); //b=""

  getHost

  程序:getHost(url)

  說明:回傳給予url的主機(jī)

  絕對(duì)與相關(guān)URL都能支持

  相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

  參數(shù):url=字符串

  回傳值:字符串或invalid

  例外狀況:如果遇到不正確的URL語(yǔ)法,則回傳invalid

  范例:var a=URL.geHost("http://www.acom.com/pub"); //a="www.acm.com"

  var b=URL.getHost("path#fray"); //b=""

  getPort

  程序:getPort(url)

  說明:回傳給予url的端口(port)

  如果port沒有制定,則回傳空字符串

  絕對(duì)與相關(guān)URL都能支持

  相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

  參數(shù):url=字符串

  回傳值:字符串或invalid

  例外狀況:如果遇到不正確的URL語(yǔ)法,則回傳invalid

  范例:var a=URL.getPort("http://www.acom.80/path"); //a="80"

  var b=URL.getPort("http://www.acom./path"); //b=""

  getPath

  程序:getPath(url)

  說明:回傳給予url的路徑(path)

  參數(shù):url=字符串

  回傳值:字符串或invalid

  例外狀況:如果遇到不正確的URL語(yǔ)法,則回傳invalid

  范例:var a=URL.getPath("http://w.a.com/home/sub/comp#frag"); //a="/home/sub/comp"

  var b=URL.getPath("../home/sub/comp#frag"); //b="../home/sub/comp"

  getParameters

  程序:getParameters(url)

  說明:回傳給予url的路徑(parameter)

  如果沒有指定參數(shù),則回傳空字符串

  絕對(duì)與相關(guān)URL都能支持

  相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

  參數(shù):url=字符串

  回傳值:字符串或invalid

  例外狀況:如果遇到不正確的URL語(yǔ)法,則回傳invalid

  范例:var a=URL.getParameters("http://w.a.c/scr;3;2?x=1&y=3"); //a="3;2"

  var b=URL.getParameters("../scr3;2?x=1&y=3"); //b="../home/sub/comp"

  getQuery

  程序:getQuery(url)

  說明:回傳給予url的詢問部分(query)

  如果沒有指定的詢問部分,則回傳空字符串

  絕對(duì)與相關(guān)URL都能支持

  相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

  參數(shù):url=字符串

  回傳值:字符串或invalid

  例外狀況:如果遇到不正確的URL語(yǔ)法,則回傳invalid

  范例:var a=URL.getParameters("http://w.a.c/scr;3;2?x=1&y=3"); //a="3;2"

  getFragment

  程序:getFragment(url)

  說明:回傳給予url的片斷(fragment)

  如果沒有指定片斷,則回傳空字符串

  絕對(duì)與相關(guān)URL都能支持

  相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

  參數(shù):url=字符串

  回傳值:字符串或invalid

  例外狀況:如果遇到不正確的URL語(yǔ)法,則回傳invalid

  范例:var a=URL.getFragment("http://www.acom.com/cont#fray"); //a="fray"

  getBase

  程序:getBase()

  說明:回傳次WML Script程序的絕對(duì)URL(沒有fragment的部分)。

  參數(shù):無

  回傳值:字符串

  例外狀況:無

  范例:var a=URL.getBase(); //Result;

  "http://www.acme.com/test.scr"

  getReferer

  程序:getReferer()

  說明:回傳調(diào)用目前程序資源的最小相關(guān)URL(與目前程序的基本URL的相關(guān))

  內(nèi)部程序調(diào)用并不會(huì)改變參照者

  如果目前的程序并沒有參照者,則回傳空字符串

  參數(shù):無

  回傳值:字符串

  例外狀況:無

  范例:var base=URL.getBase(); //base

  ="http://www.acme.com/current.scr"

  var prferer=URL.getReferer(); //referer="app.wml"

  resolve

  程序:resolve(baseUrl,embeddedUrl)

  說明:根據(jù)RFC2396的文件,由給予的基本base與插入embeddedUrl回傳絕對(duì)URL

  參數(shù):baseUrl=字符串

  embeddedUrl=字符串

  回傳值:字符串或invalid

  例外狀況:如果遇到不正確的URL語(yǔ)法,則回傳invalid

  范例:var a=URL.resolve(http://www.foo.com/,"foo.vcf"); //a="http://www.foo.com/foo.vcf"

  escapeString

  程序:escapeString(string)

  說明:這個(gè)程序會(huì)將所給與string字符串之中的特殊字符使用十六進(jìn)制逃脫序列來替代(你必須使用量為逃脫序列格式%xx),這些逃脫字符如下:

  控制字符(control characters):US-ASCII編碼的字符00-1F與7F

  空格(Space):US-ASCII碼編字符20十六進(jìn)制

  保留字(Reserved):";"|"/"|"?"|":"|"@"|"="|"+"|""|","

  Unwise:"{"|"}"|"|"|"\"|""|"["|"]"|"`"

  Delimes:"<"|">"|"#"|"%"|"<>"

  給予的字符串如果已經(jīng)是使用逃脫自負(fù),則不會(huì)執(zhí)行URL解析

  參數(shù):string=字符串

  回傳值:字符串或invalid

  例外狀況:如果字符串string含有非US-ASCII的字符,則回傳invalid

  范例:var a=URL.escapeString

  ("http://w.a.c/dck?x=u007ef#crd");

  // a="http%3a2f%2fw.a.c%2fdck%3fx%3def%23crd"

  unescapeString

  程序:unescapeString(string)

  說明:這個(gè)程序會(huì)將所給與string字符串之中每個(gè)可能是由URL.escapeString() 程序所產(chǎn)生的逃脫序列使用它所代表的字符加以替代。

  參數(shù):string=字符串

  回傳值:字符串或invalid

  例外狀況:如果字符串string含有非US-ASCII的字符,則回傳invalid

  范例:var a="http%3a2f%2fw.a.c%2fdck%3fx%3def%23crd";

  var b=URL.unescapeString(a); //b

  ="http://w.a.c/dck?x=12#crd"

  loadString

  程序:loadString(url,contentType)

  說明:回傳有所給予的絕對(duì)URL與contenttype所指出的內(nèi)容。

  如果內(nèi)容格是不是下列法則所規(guī)范的話,則是錯(cuò)誤的:

  你只能界定一種內(nèi)容格式,整個(gè)字符串必須和一種內(nèi)容格式相符,而 且你不能有額外的前或后空格。

  格式必須是正文,但次格式?jīng)]有限制,格式的開頭一定是"text/"。

  這個(gè)程序的動(dòng)作如下:

  文件的內(nèi)容會(huì)載入使用給予的contentType與url,其他所需的數(shù)形式有使用用戶界面的預(yù)設(shè)面。

  如果載入成功而且回傳的內(nèi)為格式與所給予的contentType相符,則內(nèi)文會(huì)被轉(zhuǎn)換成字符串再回傳。

  如果載入成功或回傳的內(nèi)文格式不正確的話,則會(huì)回傳特定的錯(cuò)誤碼。

  參數(shù):url=字符串

  contentYype=字符串

  回傳值:字符串、整數(shù)或invalid

  例外狀況:如果載入失敗其回傳的錯(cuò)誤碼和所使用的URL Scheme有關(guān)

  如果使用HTTP或WSP架構(gòu),會(huì)回傳HTTP錯(cuò)誤碼。

  如果給予的contentType錯(cuò)誤的話,則會(huì)回傳invalid

  范例:var a="http%3a2f%2fw.a.c%2fdck%3fx%3def%23crd";

  var b=URL.unescapeString(a); //b

  ="http://w.a.c/dck?x=12#crd"

  loadString

  程序:loadString(url,contentType)

  說明:回傳有所給予的絕對(duì)URL與contenttype所指出的內(nèi)容。

  如果內(nèi)容格是不是下列法則所規(guī)范的話,則是錯(cuò)誤的:

  你只能界定一種內(nèi)容格式,整個(gè)字符串必須和一種內(nèi)容格式相符,而 且你不能有額外的前或后空格。

  格式必須是正文,但次格式?jīng)]有限制,格式的開頭一定是"text/"。

  這個(gè)程序的動(dòng)作如下:

  文件的內(nèi)容會(huì)載入使用給予的contentType與url,其他內(nèi)文所需的數(shù)形式有使用用戶界面的預(yù)設(shè)面。

  如果載入成功而且回傳的內(nèi)容為格式與所給予的contentType相符,則內(nèi)文會(huì)被轉(zhuǎn)換成字符串再回傳。

  如果載入成功或回傳的內(nèi)文格式不正確的話,則會(huì)回傳特定的錯(cuò)誤碼。

  參數(shù):url=字符串

  contentYype=字符串

  回傳值:字符串、整數(shù)或invalid

  例外狀況:如果載入失敗其回傳的錯(cuò)誤碼和所使用的URL Scheme有關(guān)

  如果使用HTTP或WSP架構(gòu),會(huì)回傳HTTP錯(cuò)誤碼。

  如果給予的contentType錯(cuò)誤的話,則會(huì)回傳invalid

  范例:var myUrl="http://www.acme.com/vcards/myaddr.vcf";

  myCard=URL.loadString(myUrl,"text/x-vcard");

  6.6 WML瀏覽器函數(shù)庫(kù)

  名稱:WML Brower

  說明:這個(gè)函數(shù)庫(kù)所包含的程序是讓W(xué)ML Script用來存取與WML相關(guān)的內(nèi)文,這些程序不能有任何的副作用,并在下列的狀況下回傳invalid值。

  系統(tǒng)不支持WML瀏覽器。

  WML瀏覽器無法使用WML Script解譯器。

  getVar

  程序:getVar(name)

  說明:回傳目前瀏覽器內(nèi)文的所給予名稱name的變量值。

  如果所指定的變量不存在,回傳一個(gè)空字符串。

  變量名稱必須依照WML語(yǔ)法來使用。

  參數(shù):name=字符串

  回傳值:字符串或invalid

  例外狀況:如果變量名稱不合語(yǔ)法,則回傳invalid

  范例:var a=WMLBrowser.getVar("name");

  // a"Jon"或者變量的值

  setVar

  程序:setVar(name,value)

  說明:在目前的瀏覽器之中,如果所給予名稱name的變量,它的值同給予的值value設(shè)定的一樣的話,回傳ture,否則回傳false。

  變量名稱必須依照WML語(yǔ)法來使用。

  變量值必須是合法的XML CD ATA

  參數(shù):name=字符串

  value=字符串

  回傳值:布爾值或invalid

  例外狀況:如果變量名稱或它的值不合語(yǔ)法,則回傳invalid

  范例:var a=WMLBrowser.setVar("name",Mary); // a=true

  go

  程序:go(url)

  說明:將給予的url所標(biāo)記的內(nèi)文載入,這個(gè)程序予WML的GO動(dòng)作意思相同。

  如果所給予的url字空字符串(""),則不會(huì)載入任何內(nèi)文。

  go()與prev()函數(shù)庫(kù)程序會(huì)互相推翻,在回傳控制與WML瀏覽之前都可以加以調(diào)用多次。

  只有最后的調(diào)用設(shè)定的會(huì)保持作用,如果最后的調(diào)用為go()或prev(),其所設(shè)定的url為空字符串(""),所有的要求都會(huì)被取消。

  這個(gè)程序回傳空字符串。

  參數(shù):url=字符串

  回傳值:字符串或invalid

  例外狀況:無

  范例:varcard="http://www.acme.com/loc/app.dck#start";WMLBrowser.go(card

  )

  prev

  程序:prev()

  說明:告訴WML瀏覽器回到先前的WML Card,這個(gè)程序的功能與WML中的prev動(dòng)作一樣。

  go()與prev()函數(shù)庫(kù)程序會(huì)互相推翻,在回傳控制與WML 瀏覽之前都可以加以調(diào)用多次。

  只有最后的調(diào)用設(shè)定是會(huì)保持作用,如果最后的調(diào)用為go()或prew(),其所設(shè)定的url為空字符串(""),所有的要求都會(huì)被取消。

  這個(gè)程序回傳空字符串。

  參數(shù):無

  回傳值:字符串或invalid

  例外狀況:無

  范例:WMLBrowser.prev();

  newContext

  程序:newContext()

  說明:將目前WML瀏覽器的內(nèi)文清除并回傳一個(gè)空字符串,這個(gè)程序的公用與WML的NEWCONTEXT屬性一樣。

  參數(shù):無

  回傳值:字符串或invalid

  例外狀況:無

  范例:WMLBrowser.newContext();

  getCurrentCard

  程序:getCurrentCard()

  說明:回傳目前WML瀏覽器所處理card的最小相關(guān)URL,如果WML deck所包含目前程序的基本地址不同的話,則此程序會(huì)回傳絕對(duì)URL。

  參數(shù):無

  回傳值:字符串或invalid

  例外狀況:如果沒有目前的card,則回傳invalid。

  范例:var a=WMLBrowser.getCurrentCard();// a="deck#input"

  refresh

  程序:refresh()

  說明:強(qiáng)制WML瀏覽器更新它的內(nèi)文并回傳一個(gè)空字符串,而用戶界面會(huì)加以更新以反應(yīng)更新后的內(nèi)容,這個(gè)程序與WML中的refresh功能一樣。

  參數(shù):無

  回傳值:字符串或invalid

  例外狀況:無

  范例:WMLBrowser.setVar("name","Zorro");

  WMLBrowser.refresh();

  6.7 Dialog函數(shù)庫(kù)

  名稱:對(duì)話

  說明:這個(gè)函數(shù)庫(kù)包含典型的用戶界面程序。

  prompt

  程序:prompt(message,defaultInput)

  說明:顯示給予的信息message與用戶輸入的提示符號(hào),defaultInput參數(shù)包含了用戶輸入所需的初始內(nèi)文,回傳用戶輸入。

  參數(shù):message=字符串

  defaultInput=字符串

  回傳值:字符串或invalid

  例外狀況:無

  范例:var a="09-555 3456"; var b=Dialogs.prompt("Phome number";a);

  confirm

  程序:confirm(message,ok,cancel)

  說明:顯示所給予的信息message與兩個(gè)選項(xiàng):ok與cancel,等待用戶選取其中一個(gè),如果是ok則回傳false。

  參數(shù):message=字符串

  ok=字符串

  cancel=字符串

  回傳值:布爾值invalid

  例外狀況:無

  范例:function onAbort(){return Dialogs.confirm("Are you sure?"),"Yes","No";};

  alert

  程序:alert(message)

  說明:顯示所給予的信息message給用戶,等待用戶確定并回傳一個(gè)空字符串。

  參數(shù):message=字符串

  回傳值:字符串或invalid

  例外狀況:無

  范例:function testValue(textElement){

  if (String.length(textElement)>8) {

  Dialogs.alert("Enter name <8 chars!");

  };

  };

  6.8 函數(shù)庫(kù)總結(jié)

  函數(shù)庫(kù)

  函數(shù)庫(kù)名稱:

  Lang

  Float

  String

  URL

  WML Browser

  Dialogs

  函數(shù)庫(kù)與他們的程序:

  Lang函數(shù)庫(kù)

  Abs

  Min

  Max

  ParseInt

  ParseFloat

  IsInt

  IsFloat

  MaxInt

  MinInt

  Float

  Exit

  Abort

  Random

  Seed

  CharacterSet

  Float 函數(shù)庫(kù)

  Int

  Ploor

  Ceil

  Pow

  Round

  Sqrt

  MaxFloat

  MinFloat

  String 函數(shù)庫(kù)

  Length

  IsEmpty

  CharAt

  SubString

  Pind

  Replace

  Elements

  ElementAt

  RemoveAt

  ReplaceAt

  InsertAt

  Squeeze

  Frim

  Compqre

  ToString

  format

  URL 函數(shù)庫(kù)

  IsValid

  GetScheme

  GetHost

  GetPort

  GetPath

  GetParameters

  GetQuer

  GetFragment

  GetBase

  GetReferer

  Resolve

  EscapeString

  UnescapeString

  loadString

  WML Browse函數(shù)庫(kù)

  Get Var

  SetVar

  Go

  Prev

  NewContext

  GetCurrentCard

  Refresh

  Dialogs函數(shù)庫(kù)

  Prompt

  Confirm

  Alert

 

分享:XMLHTTP 對(duì)象及其方法簡(jiǎn)介
MSXML中提供了Microsoft.XMLHTTP對(duì)象,能夠完成從數(shù)據(jù)包到Request對(duì)象的轉(zhuǎn)換以及發(fā)送任務(wù)。 創(chuàng)建XMLHTTP對(duì)象的語(yǔ)句如下: Set objXML = CreateObject(Msxml2.XMLHTTP) 或 Set objXML = CreateObject(“Microsoft.XMLHTTP”) ' Or, for version 3.0 of XMLHTTP

來源:模板無憂//所屬分類:Xml教程/更新時(shí)間:2010-04-18
相關(guān)Xml教程
日韩手机在线导航| 亚洲激情不卡| 国产欧美一区二区精品性色超碰| 亚洲天堂精品在线| 亚洲一区二三| 麻豆亚洲av熟女国产一区二| 日韩欧美天堂| 一区二区中文视频| 久久人人看视频| 亚欧在线免费观看| 国产白浆在线观看| 久久综合网络一区二区| 5858s免费视频成人| 国产精品免费一区二区三区观看| bl动漫在线观看| julia一区二区三区中文字幕| 国产中文字幕精品| 日韩毛片在线观看| 欧美日韩视频免费在线观看| 日韩欧美中文字幕一区二区| 久久伦理在线| 欧美午夜精品在线| 91在线短视频| 午夜激情福利电影| 亚洲aaa级| 亚洲码国产岛国毛片在线| 欧美最猛性xxxxx亚洲精品| 日本高清久久久| 亚洲人体视频| 成+人+亚洲+综合天堂| 色视频www在线播放国产成人| 国产婷婷一区二区三区| 91禁在线观看| 欧美a一区二区| 日韩成人在线电影网| 午夜探花在线观看| 又骚又黄的视频| 天堂久久一区二区三区| 日韩av一区二区在线观看| 乱子伦一区二区| 中文字幕在线2018| 天堂av在线一区| 日韩成人激情视频| 毛片在线视频播放| 黄色一级大片在线免费看国产| 国内精品伊人久久久久av影院| 国产一区二区免费| 欧美色图另类小说| 婷婷伊人综合中文字幕| 成人性色生活片免费看爆迷你毛片| 色阁综合伊人av| 天天色综合社区| 视频一区在线免费看| 久久久久久麻豆| 国产69久久精品成人看| 丰满岳乱妇一区二区| 91午夜精品| 亚洲国产日韩在线一区模特| 亚洲最大的网站| 国产大片免费看| 亚洲一级高清| 精品三级在线观看| 国产 日韩 欧美在线| 丁香花免费高清完整在线播放 | 91一区在线观看| 国模极品一区二区三区| 国产女人18毛片水真多18| 亚洲欧美日本国产| 亚洲国产精品久久久男人的天堂| 99精品国产高清一区二区| 激情综合五月网| 激情婷婷亚洲| 精品呦交小u女在线| 日韩a在线播放| 日本精品裸体写真集在线观看| 国产视频亚洲色图| 国产日本欧美一区二区三区在线| 任我爽在线视频| 欧美激情性爽国产精品17p| 日韩一区二区三区电影| 欧美中日韩在线| jk漫画禁漫成人入口| 国产网站一区二区三区| 国产伊人精品在线| 欧美性猛交xxxxx少妇| 亚洲第一伊人| 中文字幕av一区二区三区谷原希美| av网站在线不卡| 亚洲国产欧美在线观看| 午夜精品免费在线| 天堂精品一区二区三区| 国产精品污视频| 91女厕偷拍女厕偷拍高清| 国产精品男人爽免费视频1| 26uuu成人网| 亚洲免费网站| 超碰91人人草人人干| 亚洲成年人在线观看| 国产区精品区| 日韩欧美国产一区二区三区 | 午夜天堂影视香蕉久久| 日韩福利视频| 性欧美8khd高清极品| 久久婷婷成人综合色| 亚洲自拍偷拍福利| 亚洲精品成人在线视频| 国产精品一区二区无线| 欧美专区福利在线| 欧美精品videos极品| 日韩精品免费视频人成| 欧美国产极速在线| 永久免费毛片在线观看| 影院欧美亚洲| 精品国偷自产在线视频99| 亚洲一区二区乱码| 欧美 日韩 国产一区二区在线视频| 国产视频久久久| 国产九九九视频| 精品视频日韩| 日韩成人高清在线| 白丝校花扒腿让我c| 成人看的羞羞网站| 日韩精品在线第一页| 男人的天堂免费| 99精品国产一区二区三区| 亚洲精品日韩久久久| 免费观看一区二区三区| 午夜国产一区二区| 国产一区二区三区直播精品电影| 在线播放第一页| 永久91嫩草亚洲精品人人| 亚洲日韩第一页| 伦理片一区二区| 国产精品观看| 另类色图亚洲色图| 乱老熟女一区二区三区| 日韩电影一区二区三区| 国产不卡av在线免费观看| 国产真实夫妇交换视频| 国产精品一色哟哟哟| 国产自摸综合网| 性色av一区二区三区四区| 久久综合色婷婷| 精品国产区在线| 亚洲美女综合网| 亚洲专区一二三| 国产又粗又大又爽的视频| 亚洲www免费| 色先锋资源久久综合| 大肉大捧一进一出好爽视频| 嗯用力啊快一点好舒服小柔久久| 欧美一区二区三区成人| 国内av一区二区| 亚洲色图插插| 色综合色综合久久综合频道88| 黄色a级片在线观看| 国产一区二区在线电影| 亚洲最大的免费| 国产1区在线观看| 午夜精品久久久久久久久久| 国产精彩视频一区二区| 日韩av中文字幕一区| 国产视频精品免费播放| 人妻aⅴ无码一区二区三区| 日产国产欧美视频一区精品| 国产精品亚洲自拍| 国产精品九九九九| 一级精品视频在线观看宜春院| 国产精品久久久久9999爆乳| 国产精品久久久网站| 精品国产乱码久久久久久免费| a天堂视频在线观看| 久久成人在线| 91精品国产自产在线观看永久| 国产一区二区三区中文字幕| 亚洲影视资源网| 国产精品秘入口18禁麻豆免会员| 欧美日韩中文一区二区| 米奇精品一区二区三区在线观看| 九九热精品免费视频| 91丨porny丨国产| 亚洲高清视频一区| 精品伊人久久| 亚洲精品一区二区三区婷婷月 | 亚洲精品免费在线观看| 日本中文字幕在线视频观看| 国产成人3p视频免费观看| 中文字幕一区二区精品| 国产性生活网站| 久久久久久久电影| 黄色网址在线免费看| 奇米777国产一区国产二区| 一区二区在线视频播放| 欧美激情图片小说| 久久久久一区二区三区四区| 在线不卡日本| 婷婷亚洲成人| 欧美成人一区在线| 亚洲欧美一区二区三区在线观看| 亚洲欧洲av在线| 欧美日韩亚洲第一| 欧美韩国一区| 国产精品户外野外| 噜噜噜久久,亚洲精品国产品| 欧美午夜片在线免费观看| 欧美性受xxxxxx黑人xyx性爽| 一区二区激情| 91久久嫩草影院一区二区| 亚洲欧美日韩成人在线| 日韩一区国产二区欧美三区| 久久久久久亚洲中文字幕无码| 国产精品一区二区在线观看网站 | 忘忧草精品久久久久久久高清| 高清欧美一区二区三区| 亚洲在线观看av| 色综合久久久久综合体 | 国产亚洲欧美日韩日本| 日韩精品一区二区在线视频| 日本一本不卡| 日本亚洲精品在线观看| 亚洲乱色熟女一区二区三区| 欧美日韩免费视频| 日韩乱码人妻无码中文字幕久久 | 日日碰狠狠丁香久燥| 在线 亚洲欧美在线综合一区| 国产日韩在线视频| 色8久久影院午夜场| 日韩精品www| 久草视频中文在线| 亚洲日本一区二区三区| 五月婷婷激情久久| 日韩专区欧美专区| 免费电影一区| 日本成人a网站| 97在线视频观看| 蜜臀久久99精品久久久| 日韩一区二区三| 老女人性淫交视频| 亚洲精品欧美在线| 91网址在线观看精品| 精品一区二区三区免费观看| 日韩精品欧美专区| 亚洲精品一级二级三级| 97精品国产| 国产精品二区不卡| 精久久久久久| **性色生活片久久毛片| 毛片在线视频播放| 亚洲免费黄色| 国产一区二区黄色| 精品少妇3p| 久久久久久久国产精品| www.色播.com| 亚洲国产成人爱av在线播放| 中文字幕免费高清视频| 日韩专区视频| 亚洲日本成人网| 欧美性猛交xxxx乱大交hd| 亚洲黄色大片| 精品国产乱码久久| 成人精品一二三区| 国产精品二三区| 在线视频观看91| 国产精品一区二区三区四区| 精品免费久久久久久久| 亚洲激情午夜| 欧美不卡1区2区3区| 欧美一站二站| 91久久国产精品| 97青娱国产盛宴精品视频| 国内精品小视频在线观看| 少妇精品视频一区二区| 亚洲视频999| 亚洲天堂网视频| 日韩视频免费观看高清完整版 | 三区精品视频| 99久久综合狠狠综合久久aⅴ| 91免费精品视频| 你懂的在线观看一区二区| 欧美自拍视频在线| 亚洲a成人v| 韩国三级电影久久久久久| 欧美成a人片在线观看久| xvideos亚洲人网站| 女人18毛片一区二区三区| 亚洲欧美另类自拍| 国产精品一区二区三区在线免费观看| 日韩欧美不卡一区| 中文字幕第四页| 日韩一级欧美一级| 人妻丰满熟妇av无码区| 91精品国产品国语在线不卡| 97香蕉久久超级碰碰高清版| 国产免费a视频| 日韩三级在线观看| 婷婷激情五月网| 91精品国产高清一区二区三区 | 国产欧美日韩视频一区二区| 在线免费看污网站| 久久综合久久久久88| 九九九九九国产| a亚洲天堂av| 在线免费观看av的网站| 99国产欧美另类久久久精品| 在线观看av网页| 97精品国产97久久久久久久久久久久| 免费涩涩18网站入口| 成+人+亚洲+综合天堂| 中文字幕在线视频精品| 久久久夜色精品亚洲| 日本亚洲一区二区三区| 久久久www免费人成精品| 中文字幕在线观看视频www| 日本一区免费视频| 国产精品福利导航| 亚洲免费在线电影| av永久免费观看| 日韩欧美亚洲成人| 久久久久噜噜噜亚洲熟女综合| 欧美性受xxxx| 成人毛片在线播放| 欧美xfplay| 国产普通话bbwbbwbbw| 中文国产亚洲喷潮| 欧美日韩美女| 91tv亚洲精品香蕉国产一区7ujn| 日韩精品亚洲专区在线观看| 国产精品自拍偷拍| 精品av一区二区| 免费久久久一本精品久久区| 亚洲调教视频在线观看| 精品国产一区二区三区在线| 久久精品国产一区二区三 | 精品久久久久久中文字幕一区奶水 | 一区二区三区 日韩| 久久这里只有精品6| 污污内射在线观看一区二区少妇 | 一区在线观看免费| 色屁屁草草影院ccyy.com| 色综合久久六月婷婷中文字幕| 日韩成人av毛片| 亚洲激情中文字幕| 欧美 日韩 国产 成人 在线 91| 操91在线视频| 亚洲精品一区二区三区在线| 成人美女免费网站视频| 99re6这里只有精品| 亚洲欧洲精品一区二区| 蜜桃av一区二区| 日韩av在线中文| 成人欧美一区二区三区| 91传媒免费观看| 日韩一区二区电影在线| 99精品国产99久久久久久97| 久久亚洲精品网站| 欧美大片91| 国产成人精品免费视频大全最热 | 丝袜足脚交91精品| 七七婷婷婷婷精品国产| 成 人 黄 色 小说网站 s色| 亚洲人成精品久久久久| 亚洲国产成人精品综合99| 日韩精品在线一区| 人人妻人人澡人人爽久久av| 欧美一级电影在线| 国产精品片aa在线观看| 日韩免费中文专区| 久草精品在线观看| 韩国三级hd中文字幕有哪些| 亚洲国产你懂的| 好吊妞视频一区二区三区| 亚洲性69xxxbbb| 国产精品2区| 国产超碰91| 久久影院亚洲| xxxx在线免费观看| 亚洲电影一级黄| 国产99免费视频| 欧美成人四级hd版| 欧美一性一交| 神马影院午夜我不卡| 国产成人综合在线观看| a级在线观看视频| 欧美蜜桃一区二区三区| 黄色aaa毛片| 国产精品精品视频一区二区三区| 天天射—综合中文网| 每日在线观看av| 国产精品久久久久久一区二区三区| 日韩成人毛片视频| 国产丝袜一区二区| 成人久久精品| 久久亚洲高清| 国产一区欧美日韩| 人妻熟女aⅴ一区二区三区汇编| 欧美午夜一区二区三区免费大片| 99色精品视频| 好吊一区二区三区| av免费观看网| 一区二区三区国产|