JavaScript程序設計-第2章(語言語法-數據類型-運算符-控制語句)_第1頁
JavaScript程序設計-第2章(語言語法-數據類型-運算符-控制語句)_第2頁
JavaScript程序設計-第2章(語言語法-數據類型-運算符-控制語句)_第3頁
JavaScript程序設計-第2章(語言語法-數據類型-運算符-控制語句)_第4頁
JavaScript程序設計-第2章(語言語法-數據類型-運算符-控制語句)_第5頁
已閱讀5頁,還剩55頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

JavaScript程序設計第二章:JavaScript基本概念王瑞內容語法關鍵字變量數據類型操作符控制語句函數語法ECMAScript第3版區分大小寫:ECMAScript中的一切(變量、函數名操作符)都區分大小寫。標識符:第一個字符必須是一個字母、“_”或“$”。其它字符可以是字母、“_”、“$”或數字。不能將關鍵字或保留字作為標識符。語法ECMAScript第3版注釋//單行注釋/*多行注釋*/語句ECMAScript中的語句以一個分號結尾;如果省略分號,則由解析器確定語句的結尾。varsum=a+bvarsum=a+b;//推薦多條語句組成的語句塊與C語言相同,使用“{}”:if(test){…………}關鍵字保留字變量ECMAScript的變量是松散類型的,也就是說可以保存任何類型的數據。變量僅僅是用于保存值的占位符。聲明變量可使用var關鍵字(var關鍵字,聲明的變量是該變量在作用域中的局部變量,不使用var創建的變量是全局變量)。varmessage;可以聲明變量時,賦初值。varmessage=“success”;數據類型ECMAScript中有5種簡單數據類型(基本數據類型):undefine、null、boolean、number、string。還有一種復雜數據類型:Object,Object本質上是由一組無序的名值對組成的。Undefined類型Undefined類型只有一個值,即undefined。在一變量沒有初始化時,這個變量的值就是undefined。例:varmessage;alert(message==undefined);//true注:undefined值,是變量已聲明,但沒有初始化。不是未聲明!!!Null類型Null類型是第二個只有一個值的數據類型,這個值就是null。從邏輯上看,null值表示一個空對象指針,而這也正是使用typeof檢測null值時,返回“object”的原因。varcar=null;alert(typeofcar);//object注:如果定義一個變量準備用來保存對象,那么最好將該變量初始化為null而不是其它值。這樣可以通過判斷其值是否為null,得知變量是否已經引用了一個對象。實際上,undefined派生自null,因此ECMA-262規定對它們的相等性測試要返回“true”:alert(car==undefined);//trueBoolean類型該類型只有兩個值true、false。注意boolean類型的字面值true、false是區分大小寫的。True和False都不是boolean值。雖然boolean類型的字面值只有true、false。但是ECMAScript中所有類型的值都有與這兩個boolean值等價的值。要將一個值轉換為其對應的boolean值,可以調用轉型函數Boolean()。隱式轉換:varmsg=“ok”;

if(msg)……數據類型轉換為true的值轉換為false的值BooleantruefalseString任何非空字符串“”空字符串Number任何非零數字值0和NaNObject任何對象nullUndefinedn/a(notapplicable不適用)undefinedNumber類型可以表示整數和浮點數。數值可以用十進制、8進制和16進制來表示。但在計算時都被轉換成十進制。Varnum=10;//10進制表示Varnumb=070;//用8進制表示的56Varnumb2=0XA;//用16進制表示的10浮點數包含小數點,并在小數點后面必須至少有一位數字,小數字前可以沒有數字(不推薦)。由于保存浮點數需要的內存空間是整數的兩倍,因此ECMAScript會不失時機的將浮點值轉換為整型值。如:Varflo=1.0;Varflo1=1.;可以使用科學記數法表示數值:varnum=3e-2;//0.03Number類型采用IEEE754格式,浮點數的精度遠不如整數。如0.1和0.2相加的結果不是0.3,而是0.30000000000000004。

Number類型數據范圍最小數值保存在Number.MIN_VALUE中,在大多數瀏覽器中,這個值是5e-324;最大值在Number.MAX_VALUE中,值是1.7976931348623157e+308。如果計算的結果超出數值范圍,那么這個數值將被自動轉換成特殊的Infinity(Number.POSITIVE_INFINITY)值。如果這個值是負值,則地轉換成-infinity(Number.NEGATIVE_INFINITY)。判斷數值是否在范圍內,可使用函數isFinite(數值):isFinite(33);//trueisFinite(Number.POSITIVE_INFINITY);//falseNumber類型NaN即非數值(NotaNumber),表示一個本來要返回數值的操作數未返回數值的情況(一種異常情況,這樣就不會拋出錯誤了)。例如,在其他編程語言中,0除以0都會導致錯誤,從而停止代碼執行。但在ECMAScript中,返回NaN。NaN有兩個非同尋常的特點。首先,任何涉及NaN的操作都會返回NaN。其次,NaN與任何值都不等,包括NaN自身。isNaN(變量)函數,用以測試參數是否“不是數值”,不是數值時返回true。isNaN(NaN);//trueisNaN(10);//falseisNaN(“10”);//false(“10”可以轉換為10)isNaN(“blue”);//true(不可以轉換為數值)isNaN(true);//false(true可被轉換為1)Number類型數值轉換有3個函數可以實現把非數值轉換為數值:Number()、parseInt()、parseFloat()。Number()函數轉換規則:boolean:true->1,false->0Null:0Undefined:NaN字符串:內容是數值的轉換為數值,其它轉換為NaN。對象:調用對象的valueof(),如果是NaN,則調用toString()。例:Number(“china”);//NaNNumber(“”);//0Number(“00011”);//11Number(true);//1Number("0x9");//9Number類型parseInt()在轉換字符串時,更多的是看其是否符合數值模式。它會忽略字符串前面的空格。如果第一個不是數字或負號,返回NaN。如果字符串前面是數字后面是其它字符,則取前面的數字。如果是以0開頭,轉換成8進制數,以0X開頭解析為16進制數。parseInt(“123abc”);//123parseInt(“”);//NaNNumber(“”);//0parseInt(“0xA“);//0XAparseInt(22.5);//22parseInt(“070”);//070(8進制)56DparseInt(“70”);//70parseInt(,)函數還提供了第2個參數,用以確定要轉換的數值進制。當指定進制時,被轉換的16進制和8進制數,可以不要0X和0開頭。parseInt(“0xFA”,16);//250parseInt(“FA”,16);//250parseInt(“FA”);//NaNparseInt(“10”,8);//8parseInt(“10”,10);//10Number類型parseFloat()從第一個字符開始解析,當遇到無效的字符或第二個小數點為止。始終忽略前導的0。但16進制的字符串始終會轉換為0,只能解析10進制值。如果解析的數值沒有小數點,則返回整數類型。parseFloat(“123abc”);//123parseFloat(“0xa”);//10parseFloat(“22.5”);//22.5parseFloat(“22.22.22”)://22.22parseFloat(“0908.5”);//908.5parseFloat(“3.14e5”);//314000String類型由16位Unicode字體組成的字符序列。可以由(“”)或(‘’)表示,但需成對使用。轉義字符字符串長度Vartxt=“china”;Alert(txt.length);//5String類型轉換為字符串數值、boolean、對象、字符串都有toString()方法。null和undefined沒有toString()方法。一般情況下toString()方法沒有參數,也可以通過參數,指定要轉換的數值類型的進制。如varnum=10;Alert(num.toString(8));//12Alert(num.toString(16));//A注:在不知道要轉換的值是否是null或undefined時,可使用String()方法。將任何類型轉換為字符串。String(null);//返回“null”Varval;Alert(String(val));//返回”undefined”Object類型ECMAScript中的對象其實就是一組數據和功能的集合。對象可以通過new操作符后跟對象類型來創建。而創建Object類型的實例并為其添加屬性和方法,就可以創建自定義對象。Varobj=newObject();Typeof操作符使用typeof操作符可以用來檢測變量的數據類型。根據變量的數據類型返回下列字符串:Undefined:值未定義boolean:是boolean類型String:是字符串類型Number:是數值類型Object:是對象類型Function:是函數例:alert(typeof95)-----number操作符一元操作符ECMA-262描述了一組用于操作數值的操作符,包括算術操作符(加、減)、位操作符、關系操作符和相等操作符。一元操作符遞增和遞減操作符(++、--),可分為前置型和后置型。前置型在變量使用前先進行遞增或遞減操作,后置型在使用后再進行遞增或遞減操作。如:vara=10;a=a+++1;//11alert(a);//11a=++a+4;//16alert(a);//16a=1;++a;a++;=>a+1;操作符一元操作符遞增和遞減操作符(++、--)對于boolean值先將值false轉換為0,再進行++、--操作。對于true轉換為1,再進行++、--操作。varaa=false;alert(++aa);//1alert(++false);//錯誤varbb=true;alert(++bb);//2操作符一元操作符遞增和遞減操作符(++、--)對于字符串先將值轉換為數值類型,再進行++、--操作。varaa=“china”;alert(++aa);//NaNvaraa=“123china”;alert(++aa);//NaNvaraa="123";alert(++aa);//124操作符一元操作符遞增和遞減操作符(++、--)對于Object類型先將值轉換為數值類型(調用對象的valueOf方法如果為NaN,則調用對象的toSting()方法),再進行++、--操作。varo={valueOf:function(){return-1}};alert(++o);//0操作符一元操作符一元加\減操作符一元加操作符以一個(+)表示,不會對數值產生任何影響。減操作符以(-)表示,將值變成負數。以于非數值類型,會先像Number()轉型函數一樣對這個值進行轉換。定義+操作結果-操作結果vars1=“01”+s1;1-s1-1Vars2=“1.1”+s21.1-s2-1.1Vars3=“z”+s3NaN-s3NaNVarb=false;+b0-b0Varf=1.1+f1.1-f-1.1Varv={valueOf:function(){return-1}};+v-1-v1操作符位操作符位操作符對于有符號整數,32位中的前31位用于表示整數的值。第32位表示數值的符號(符號位):0表示正數,1表示負數。負數使用2進制數的補碼表示。按位非(~)執行按位非的運算就是返回數值的反碼。將每一位上的0和1進行取反(0變成1,1變成0)。操作符位操作符按位與(&)按位與操作就是將兩個2進制數的每一位對齊,然后按對應的位之間進行“與”操作。當兩個位都是1時,返回1。其它返回0。操作符位操作符按位或(|)按位與操作就是將兩個2進制數的每一位對齊,然后按對應的位之間進行“或”操作。當兩個數對應的位只要有一個為1時,返回1(兩個都為1時,也返回1)。兩個都是0時,返回0。操作符位操作符按位異或(^)按位與操作就是將兩個2進制數的每一位對齊,然后按對應的位之間進行“異或”操作。當兩個數對應的位不同時為0或1(即不同)時,返回1。其它都返回0。操作符位操作符左移(<<)將2進制數向左移動指定的位數。每左移一位相當于該數值乘以2。操作符位操作符有符號的右移(>>)將2進制數向右移動指定的位數。但保留符號位(即正負號標記)。操作符位操作符無符號的右移(>>>)將2進制數向右移動指定的位數。不保留符號位,以0填充空位。對于正數沒有影響。但負數會變為正數。操作符邏輯操作符邏輯操作符有“邏輯非(!)”、“邏輯或(||)”、“邏輯與(&&)”。操作符布爾操作符邏輯非(!)該操作符返回一個boolean值。邏輯非操作符將它的操作數轉換為一個boolean值,然后進行求反。操作數轉換后的boolean值!是一個對象trueFalse是一個空字符串FalseTrue是一個非空字符串TrueFalse數值0FalseTrue非0數值TrueFalse是nullFalseTrueNaNFalseTrueundefinedfalsetrue操作符布爾操作符邏輯與(并且)(&&)該操作符有兩個操作數。當且僅當兩個操作數都為true時,返回true。否則返回false。邏輯與可以應用于任何類型的操作數,而不僅是boolean值。在有一個操作數不是boolean值的情況下,邏輯與操作不一定返回布爾值;它遵循如下原則:如果第一個操作數是對象,返回第二個操作數;如果兩個操作數都是對象,返回第二個操作數;如果第二個操作數是對象,第一個操作數求值結果是true,返回第二個操作數,否則返回第一個操作數;如果第一個操作數為null,則返回null;如果第一個操作數為undefined,則返回undefined;如果第一個操作數為NaN,則返回NaN。操作符布爾操作符邏輯或(或者)(||)該操作符有兩個操作數。當其中一個操作數為true時,返回true。都為False時,返回false。邏輯或可以應用于任何類型的操作數,在有一個操作數不是boolean值的情況下,邏輯或操作不一定返回布爾值;它遵循如下原則:如果第一個操作數是對象,返回第一個操作數;如果兩個操作數都是對象,返回第一個操作數;如果第一個操作數求值結果為false,返回第二個操作數;如果有兩個操作數為null,則返回null;如果有兩個操作數為undefined,則返回undefined;如果有兩個操作數為NaN,則返回NaN。操作符乘性操作符ECMAScript定義了3個乘性操作符:乘法、除法、求模。乘法(*)在操作數為非數值情況下會執行自動的類型轉換(使用Number())。規則如下:如果乘積結果超過ECMAScript數值的表示范圍,返回infinity或-infinity;如果有一個數是NaN,則結果是NaN;如果infinity與0相乘,結果是NaN;如果infinity與非0數值相乘,結果是infinity;如果是infinity與infinity相乘,結果是infinity;如果有一個操作數不是數值,則在后臺調用Number()轉換,再應用上面的規則。操作符乘性操作符除法(/)在操作數為非數值情況下會執行自動的類型轉換(使用Number())。規則如下:如果除計算結果超過ECMAScript數值的表示范圍,返回infinity或-infinity;如果有一個數是NaN,則結果是NaN;如果是infinity被infinity除,結果是NaN;如果是infinity被任意數值除,則結果是infinity;如果0被0除,結果是NaN;如果是非0的數,被0除。結果是infinity或-infinity,符號取決與操作數;(7/0)=infinity如果有一個操作數不是數值,則在后臺調用Number()轉換,再應用上面的規則。操作符乘性操作符求模(%)求余數。在操作數為非數值情況下會執行自動的類型轉換(使用Number())。規則如下:如果被除數是無窮大值,而除數是有限大的值,則結果是NaN;(Number.POSITIVE_INFINITY%33)如果被除數是有限大的數值,而除數是0,則結果是NaN;(44%0)如果是infinity被infinity除,結果是NaN;如果被除數是有限大的值,而除數是無窮大的值,則結果是被除數;(44%Number.POSITIVE_INFINITY)如果被除數是0,結果是0;如果有一個操作數不是數值,則在后臺調用Number()轉換,再應用上面的規則。操作符加性操作符(+)加法操作符,如果兩個操作數都是數值,執行常規的加法計算,根據下列規則返回結果:如果有一個數是NaN,則結果是NaN;如果是infinity加infinity,結果是infinity;如果是-infinity加-infinity,結果是-infinity;如果是+infinity加-infinity,結果是NaN;(+/-)0加(+/-)0,結果為0。如果兩個操作數都是字符串,則將兩個字串拼接起來;如果只有一個是字符串,則將另一個操作數轉換為字符串,再拼接起來。(對象或boolean對其調用toString())操作符減性操作符(-)減法操作符,如果兩個操作數都是數值,執行常規的減法計算,根據下列規則返回結果:如果有一個數是NaN,則結果是NaN;如果是infinity減infinity,結果是NaN;如果是-infinity減-infinity,結果是NaN;如果是+infinity減-infinity,結果是infinity;如果是-infinity減infinity,結果是-infinity;(+/-)0減(+/-)0,結果為0。如果有一個操作數是字符串、布爾值、null或undefined,則先在后臺調用Number()將其轉換為數值。如果有一個操作數是對象,則調用對象的valueOf()方法,如果沒有valueOf()方法,調用toString()方法,并將得到的字符串轉換為數值。操作符關系操作符關系操作符<,>,<=,>=這幾個操作符都返回boolean值。如果操作數不都是數值類型時,進行轉換的規則如下:如果兩個操作數都是字符串,則比較兩個字符串對應的字符編碼值;(字符串比較的是字符編碼的值,不是字母的前后位置,大寫字母的編碼值小)如果一個操作數是數值,則將另一個轉換為數值再比較;如果一個操作數是對象,則調用其valueOf()ortoString()方法,再就前面說的規則比較;如果一個操作數是boolean類型,則先轉換為數值,再比較。任何數與NaN進行關系比較,結果都是false。操作符相等操作符相等(==)和不相等(!=)在轉換不同的數據類型時,相等和不相等操作符遵循下列規則:如果有一個操作數是布爾值,則在比較相等性前,先將其轉換為數值;如果一個操作數是字符串,另一個是數值,在比較前先將字符串轉換為數值;如果一個操作數是對象,另一個操作數不是,則調用對象的valueOf()方法;Null與undefined是相等的;在比較相等性之前,不能將null、undefined轉換為其他任何值。如果有一個是NaN,相等返回false,不相等返回true;NaN與NaN不相等。如果兩個操作數都是對象,則比較它們是不是同一個對象。是同一個對象返回true,否則返回false。(兩個都是對象,則比較的是內存地址)操作符相等操作符全等(===)和(!==)全不等除了在比較之前不轉換操作數之外,全等不全等與相等和不相等操作符沒有區別。Varresult1=‘55’==55;//trueVarresult2=‘55’===55;//false;Varresult3=‘55’!=55;//falseVarresult4=‘55’!==55;//true條件操作符Variable=boolean_expression?true_value:false_value;相當于:if(boolean_expression){returntrue_value;}else{returnfalse_value;}

賦值操作符簡單的賦值操作符由(=)表示,表示將操作符右邊的值賦給左邊的變量。Varnum=10;如果在等于號前面添加(+、-、*、/、<<、>>、>>>)運算符,可以合并運算與賦值操作。但不能提高效能。語句在JavaScript中,一條語句以“;”結束。也可以不加“;”,由解析器自己決定。推薦的使用方式:每條語句以“;”結束。語句ifif(condition){statement;}else{Statement;}if(condition){statement;}elseif(condition){statement;}elseif(condition){statement;}else{statement;}語句do…whilewhiledo{statement;}while(condition);while(condition){statement;}語句forfor-infor(initialzation;expression;post-loop-expression)Statement;Example:for(vari=0;i<100;i++){

alert(i);}For(propertyinexpression)statement;

example:

for(varpropinwindow){ alert(prop);//輸出window對象的全部屬性}vararr=newArray("a","b");for(vara=0;a<arr.length;a++)alert(arr[a]);for(variinarr)//i=0i=1alert(arr[i]);3段式語句labelLabel語句可以在代碼中添加標簽,以便將來使用。語法:label:statementExample:start:for(……){}此例中的“start”標記,將來可以被contionue或break語句引用。語句break和continue用以退出循環或執行下一次循環。在不與label配合使用的情況下,暫停當前的循環語句。當與label標記配合使用的情況下,可以定位到要退出的語句塊或下一次要執行的語句塊。varnum=0;outermost:for(vari=0;i<10;i++){for(varj=0;j<10;j++){

if(i==5&&j==5)

breakoutermost;

num++;

}

}alert(num);語句withwith語句的作用是將代碼的作用域設置到一個特定的對象中。如定義with語句的目的主要是為了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論