版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《JavaScript與jQuery網頁前端開發(fā)與設計-第2版》教案第3章JavaScript數(shù)據(jù)類型與運算符一、教學目標:掌握JavaScript的基本數(shù)據(jù)類型與對象類型;掌握JavaScript類型轉換方法;掌握JavaScript運算符的使用。二、教學重點和難點:重點:JavaScript的基本數(shù)據(jù)類型與對象類型;難點:JavaScript類型轉換方法。三、教學方法與手段:采取互動式教學方法,理論教學使用多媒體投影教室。四、課程簡介:本章主要內容是JavaScript基礎知識,包括JavaScript的使用、語法、變量等內容?;緮?shù)據(jù)類型、對象、類型轉換、運算符、條件和循環(huán)語句、函數(shù)、DOM與BOM的用法。五、教學基本內容:3.1JavaScript基本數(shù)據(jù)類型JavaScript有五種原始類型分別是:Number(數(shù)字)、Boolean(布爾值)、String(字符串)、Null(空值)和Undefined(未定義)。JavaScript提供了typeof方法用于檢測變量的數(shù)據(jù)類型,該方法會根據(jù)變量本身的數(shù)據(jù)類型給出對應名稱的返回值。語法格式如下:typeof變量名稱對于指定的變量使用typeof方法,其返回值是提示數(shù)據(jù)類型的文本內容。常見有5種情況如表3-1所示。表3-SEQ表4-\*ARABIC1typeof方法的常見返回值一覽表返回值示例解釋undefinedvarx;alert(x);該變量未賦值。booleanvarx=true;alert(x);該變量為布爾值。stringvarx="Hello";alert(x);該變量為字符串。numbervarx=3.14;alert(x);該變量為數(shù)值。objectvarx=null;alert(x);該變量為空值null或對象。3.1.1Undefined類型所有Undefined類型的輸出值都是undefined。當需要輸出的變量從未聲明過,或者使用關鍵詞var聲明過但是從未進行賦值時會顯示undefined字樣。例如:alert(y);//返回值為undefined,因為變量y之前從未使用關鍵詞var進行聲明或varx;alert(x);//返回值也是undefined,因為未給變量x進行賦值【例3-1】JavaScript基礎數(shù)據(jù)類型Undefined的簡單應用【代碼說明】本示例使用關鍵詞var聲明了變量msg,但未對其進行初始賦值就直接使用alert(msg)方法要求在對話框中顯示該變量內容。由圖可見,此時顯示出來的結果為undefined。3.1.2Null類型null值表示變量的內容為空,可用于初始化變量,或者清空已經賦值的變量。例如:varx=99;x=null;alert(x);//此時返回值是null而不是99【例3-2】JavaScript基礎數(shù)據(jù)類型Null的簡單應用【代碼說明】本示例使用關鍵詞var聲明了變量msg并對其賦值為null,然后使用alert(msg)方法要求在對話框中顯示該變量內容。由圖可見,此時顯示出來的結果為null。3.1.3String類型在JavaScript中String類型用于存儲文本內容,又稱為字符串類型。為變量進行字符串賦值時需要使用引號(單引號或雙引號均可)括住文本內容。例如:varcountry='China';或varcountry="China";與JavaScript不同的是,在Java中使用單引號聲明單個字符,使用雙引號聲明字符串。而在JavaScript中沒有區(qū)分單個字符和字符串,因此兩種聲明方式任選一種都是有效的。如果字符串內容本身也需要帶上引號,則用于包圍字符串的引號不可以和文本內容中的引號相同。例如字符串本身如果帶有雙引號,則使用單引號包圍字符串;反之亦然。例如:vardialog='Todayisagift,thatiswhyitiscalled"Present".';或vardialog="Todayisagift,thatiswhyitiscalled'Present'.";此時字符串內部的引號會默認保留字面的樣式。String對象中包含了一系列方法,常用方法如表3-2所示。表3-SEQ表4-\*ARABIC2JavaScriptString對象常見方法一覽方法名解釋charAt()返回指定位置上的字符。charCodeAt()返回指定位置上的字符Unicode編碼。concat()連接字符串。indexOf()正序檢索字符串中指定內容的位置。lastIndexOf()倒序檢索字符串中指定內容的位置。match()返回匹配正則表達式的所有字符串。replace()替換字符串中匹配正則表達式的指定內容。search()返回匹配正則表達式的索引值。slice()根據(jù)指定位置節(jié)選字符串片段。split()把字符串分割成字符串數(shù)組。substring()根據(jù)指定位置節(jié)選字符串片段toLowerCase()將字符串中所有字母都轉換為小寫。toUpperCase()將字符串中所有字母都轉換為大寫。1. 字符串長度在字符串中,每一個字符都有固定的位置,其位置從左往右進行分配。以單詞hello為例,首字符H從位置0開始,第二個字符L是位置1,以此類推,直到最后一個字符O的位置是字符串的總長度少1??梢允褂肧tring對象的屬性length獲取字符串的長度。例如:vars="Hello";varslen=s.length;//返回值是變量s的字符串長度,即5?!纠?-3】JavaScript獲取字符串長度的簡單應用【代碼說明】本示例使用關鍵詞var聲明了變量msg并對其賦值為"HelloJavaScript!",然后使用字符串類型的length屬性獲取其字符長度并使用alert()方法顯示出來。由圖可見,此時顯示出來的結果為17,因為空格和感嘆號也各算1個字符位置,因此總長度為5+1+10+1=17。2. 獲取字符串中的單個字符在JavaScript中可以使用charAt()方法獲取字符串指定位置上的單個字符。其語法結構如下:charAt(index)其中index參數(shù)值填寫需要獲取的字符所在位置。例如:varmsg="HelloJavaScript";varx=msg.charAt(0);//表示獲取msg中的第一個字符,返回值為H如果需要獲取指定位置上單個字符的字符代碼,可以使用charCodeAt()方法。其語法結構如下:charCodeAt(index)其中index參數(shù)值填寫需要獲取的字符所在位置。例如:varmsg="HelloJavaScript";varx=msg.charCodeAt(0);//表示獲取msg中的第一個字符的字符代碼,返回值為72【例3-4】JavaScript獲取字符串中單個字符的應用【代碼說明】本示例使用關鍵詞var聲明了變量msg并對其賦值為"HelloJavaScript",然后使用字符串類型的charAt()方法獲取其中第10位上的字符,并且用charCodeAt()方法獲取該字符的代碼,最后用alert()方法將結果顯示出來。由圖可見,此時顯示出來的結果為S,其對應的字符代碼為83。alert()方法中的\n為轉義字符,表示換行。3. 連接字符串在JavaScript中可以使用concat()方法將新的字符串內容連接到原始字符串上。其語法結構如下:concat(string1,string2...,stringN);該方法允許帶有一個或多個參數(shù),表示按照從左往右的依次連接這些字符串。例如:varmsg="Hello";varnewMsg=msg.concat("JavaScript");alert(newMsg);//返回值為"HelloJavaScript"也可以直接使用加號(+)進行字符串的連接,其效果相同。因此上述示例代碼可改為:varmsg="Hello";varnewMsg=msg+"JavaScript";alert(newMsg);//返回值為"HelloJavaScript"【例3-5】JavaScript連接字符串的簡單應用【代碼說明】本示例在JavaScript中首先聲明了三個字符串變量s1、s2和s3,然后對s1使用contact()方法連接s2和s3形成新的變量msg,最后使用alert()語句測試輸出變量msg的效果。由圖可見,變量msg為變量s1、s2和s3連接的完整版。本示例也可以直接使用加號(+)連接這三個變量實現(xiàn)同樣的效果,寫成varmsg=s1+s2+s3。需要注意的是使用contact()方法只會連接形成新的返回值,不會影響變量s1的初始內容。4. 查找字符串是否存在使用indexOf()和lastIndexOf()方法可以查找原始字符串中是否包含指定的字符串內容。其語法格式如下:indexOf(searchString,startIndex)或lastIndexOf(searchString,startIndex)其中searchString參數(shù)位置填入需要用于對比查找的字符串片段,startIndex參數(shù)用于指定搜索的起始字符,該參數(shù)內容如果省略則按照默認順序搜索全文。indexOf()和lastIndexOf()方法都可以用于查找指定內容是否存在,如果存在,其返回值為指定內容在原始字符串中的位置序號;如果不存在,則直接返回-1。區(qū)別在于,indexOf()是從序號0的位置開始正序檢索字符串內容的,而lastIndexOf()是從序號最大值的位置開始倒序檢索字符串內容?!纠?-6】JavaScript檢查字符串是否存在的簡單應用分別使用indexOf()與lastIndexOf()方法查找字符串中是否包含指定的字母。【代碼說明】本示例在JavaScript中聲明了變量msg作為測試樣例,并檢測其中字母“y”存在的位置。分別使用indexOf()和lastIndexOf()方法進行正序和倒序檢測并獲取返回值,最后使用alert()方法輸出返回結果。由圖可見,對于同一個字母“y”使用indexOf()和lastIndexOf()方法獲取位置的結果不相同,正序查找的結果為4,倒序查找的結果為13。原因是原字符串msg中包含了不止一個字母“y”,而這兩個方法會返回在字符串中查到到的第一個符合條件的字符位置,因此結果不相同。需要注意的是,JavaScript是大小寫敏感的腳本語言,因此如果本示例查找大寫字母“Y”會獲取返回值-1表示該字符不存在。5. 查找與替換字符串在JavaScript中使用match()或search()方法可以查找匹配正則表達式的字符串內容。match()方法的語法格式如下:match(regExp)參數(shù)regExp的位置需要填入一個正則表達式,例如match(/a/g)表示全局查找字母a,后面的小寫字母g是英文單詞gobal的首字母簡寫,表示全局查找。其返回值為符合條件的所有字符串片段。關于正則表達式的更多用法可查閱本章4.6.1JavaScript對象類型中的3.RegExp對象的相關內容,這里僅作為簡單使用。search()方法的語法格式如下:search(regExp)參數(shù)regExp的位置同樣需要填入一個正則表達式。不同之處在于,search()方法的返回值是符合匹配條件的字符串索引值。在JavaScript中使用replace()方法可以替換匹配正則表達式的字符串內容。replace()方法的語法格式如下:replace(regExp,replaceText)參數(shù)regExp的位置需要填入一個正則表達式,參數(shù)replaceText的位置填入需要替換的新的文本內容。例如replace(/a/g,"A")表示的是把所有的小寫字母a都替換為大寫形式。該方法的返回值是已經替換完畢的新字符串內容。【例3-7】JavaScript查找和替換字符串分別使用match()、search()與replace()方法查找和替換字符串。【代碼說明】本示例在JavaScript中聲明了變量msg作為測試樣例,分別使用match()、search()與replace()方法查找和替換字符串,最后使用alert()方法輸出全部的返回結果。由圖可見,search()方法可獲取指定內容的所在索引位置,而match()方法是把符合條件的所有字符串以逗號隔開的形式全部展現(xiàn)出來。其中\(zhòng)d表示數(shù)字0-9之間任意一個字符,/g表示全局查找。replace()方法將原字符串中所有小寫字母a均替換成了大寫字母的形式。如果沒有加全局字符g,則只會替換其中第一個小寫字母a。6. 獲取字符串片段在JavaScript中可以對字符串類型的變量使用slice()和substrig()方法截取其中的字符串片段。其中slice()方法用于去掉指定片段,substring()方法用于節(jié)選指定片段。slice()方法語法格式如下:slice(start,end)其中start參數(shù)位置填寫需要刪除的字符串的第一個字符位置,end參數(shù)位置填寫需要刪除字符串的結束位置(不包括該位置上的字符),如果end參數(shù)省略則默認填入字符串長度。如果填入的屬性值為負數(shù),表示從字符串的最后一個位置開始計算,例如-1表示倒數(shù)第一個字符。substring()方法語法格式如下:substring(start,end)與slice()方法的語法結構類似,其中start參數(shù)位置填寫需要節(jié)選的字符串的第一個字符位置,end參數(shù)位置填寫需要節(jié)選字符串的結束位置(不包括該位置上的字符),同樣如果end參數(shù)省略則默認填入字符串長度。。當參數(shù)均為非負數(shù)時,substring()與slice()方法獲取的結果完全一樣。只有參數(shù)值存在負數(shù)情況時,這兩個方法才會有所不同:substring()方法會忽略負數(shù),直接將其當作0來處理;而slice()方法會用字符串長度加上該負數(shù)數(shù)值,計算出對應的位置。例如:varmsg="happy";//該字符串長度為5位varresult1=msg.substring(1,-1);//返回值為hvarresult2=slice(1,-1);//返回值為app其中substring(1,-1)會忽略負數(shù)當作0對待,因此實際運行的是substring(1,0)方法。由于此時結束位置比開始位置靠前,JavaScript會自動對調位置轉換成substring(0,1)方法,最終獲得返回值h。而slice(1,-1)會將負數(shù)加上字符串長度換算成slice(1,4)方法,因此最終獲得返回值app?!纠?-8】JavaScript獲取字符串片段的簡單應用【代碼說明】本示例在JavaScript中聲明了變量msg作為字符串測試樣例,其中字符串內容為"HappyBirthday"共計14個字符位置。分別使用substring(0,5)和slice(0,-9)方法進行字符串節(jié)選,最后使用alert()方法輸出返回結果。由圖可見,substring(0,5)方法獲取了從第0位開始到第5位結束(不包括第5位本身)的所有字符。slice(0,-9)方法因為帶有負數(shù)-9表示倒數(shù)第9位字符,將其加上字符串長度換算后得到slice(0,5),在沒有負數(shù)的情況下與substring(0,5)效果完全相同,因此得到同樣的結果。7. 字符串大小寫轉換在JavaScript中可以對字符串類型的變量使用toLowerCase()和toUpperCase()方法轉換其中存在的大小寫字母。其中toLowerCase()表示將所有字母轉換為小寫,toUpperCase()表示將所有字母轉換位大寫?!纠?-9】JavaScript字符串大小寫轉換8. 轉義字符在前幾節(jié)的例題中都看到了alert()方法中帶有\(zhòng)n符號表示換行,這種符號稱為轉義字符。與C語言、Java語言相似,在JavaScript中String類型也包含了一系列轉義字符。\n 換行\(zhòng)t 空一個tab格,相當于4個空格\b 空格符\r 回車符\f 換頁符\\ 反斜杠\' 單引號\" 雙引號\0nnn 八進制代碼nnn表示的字符,n是0-7中的一個八進制數(shù)字,范圍是000-377。\xnn 十進制代碼nn表示的字符,n是0-F中的一個十六進制數(shù)字,范圍是00-FF。\unnn 十六進制代碼nnn表示的字符,n是0-F中的一個十六進制數(shù)字【例3-10】JavaScript轉義字符的簡單應用3.1.4Number類型在JavaScript中使用Number類型表示數(shù)字,其數(shù)字可以是32位以內的整數(shù)或64位以內的浮點數(shù)。例如:varx=9;vary=3.14;Number類型還支持使用科學計數(shù)法、八進制和十六進制的表示方式。1. 科學計數(shù)法對于極大或極小的數(shù)字也可以使用科學記數(shù)法表示,寫法格式如下:數(shù)值e倍數(shù)上述格式表示數(shù)字后面跟指數(shù)e再緊跟乘以的倍數(shù),其中數(shù)值可以是整數(shù)或浮點數(shù),倍數(shù)可以允許為負數(shù)。例如:varx1=3.14e8;varx2=3.14e-8;變量x1表示的數(shù)是3.14乘以10的8次方,即314000000;變量x2表示的數(shù)是3.14乘以10的-8次方,即0.0000000314?!纠?-11】JavaScript科學計數(shù)法的簡單應用2. 八進制與十六進制數(shù)在JavaScript中,Number類型也可以用于表示八進制或十六進制的數(shù)。八進制的數(shù)需要用數(shù)字0開頭,后面跟的數(shù)字只能是0-7(八進制字符)之間的一個。例如:varx=010;//這里相當于十進制的8十六進制的數(shù)需要用數(shù)字0和字母x開頭,后面跟字符只能是0-9或A-F(十六進制字符)之間的一個,大小寫不限。例如:varx=0xA;//這里相當于十進制的10或varx=0xa;//等同于0xA雖然Number類型可以使用八進制或十六進制的賦值方式,但是執(zhí)行代碼時仍然會將其轉換為十進制結果。【例3-12】八進制與十六進制的表達方式【代碼說明】本示例為變量x1賦值了0開頭的數(shù)字代表八進制數(shù),為變量x2賦值了0x開頭的數(shù)字代表十六進制數(shù),并使用alert()語句將其顯示在消息提示對話框中。由圖可見,最終顯示結果會自動轉換為十進制數(shù)。需要注意的是,如果需要正常表示十進制整數(shù)則不要使用數(shù)字0開頭,以免被誤認為是八進制數(shù)。3. 浮點數(shù)要定義浮點數(shù),必須使用小數(shù)點以及小數(shù)點后面至少跟一位數(shù)字。例如:varx=3.14;vary=5.0;即使小數(shù)點后面的數(shù)字為0也被認為是浮點數(shù)類型。如果浮點數(shù)類型的小數(shù)點前面整數(shù)位為0可以省略。例如:varx=.15;//等同于0.15浮點數(shù)可以使用toFixed()方法規(guī)定小數(shù)點后保留幾位數(shù)。其語法格式如下:toFixed(digital)其中參數(shù)digital換成小數(shù)點后需要保留的位數(shù)即可。例如:varx=3.1415926;varresult=x.toFixed(2);//返回值為3.14該方法遵照四舍五入的規(guī)律,即使進位后小數(shù)點后面只有0也會保留指定的位數(shù)。例如:varx=0.9999;varresult=x.toFixed(2);//返回值為1.00需要注意的是,在JavaScript中使用浮點數(shù)進行計算,有時會產生誤差。例如:varx=0.7+0.1;alert(x);//返回值會變成0.7999999999999999,而不是0.8這是由于表達式使用的是十進制數(shù),但是實際的計算是轉換成二進制數(shù)計算再轉回十進制結果的,在此過程中有時會損失精度。此時使用自定義函數(shù)將兩個加數(shù)都乘以10進行計算后再除以10還原?!纠?-13】JavaScript浮點數(shù)的簡單應用【代碼說明】本示例用于測試兩個浮點數(shù)在進行算術運行時導致的誤差,并給出了解決辦法。事實上,目前JavaScript尚不能解決該問題,必須手動將浮點數(shù)放大10的倍數(shù)成為整數(shù)再進行計算方能避免誤差。未來也可以使用自定義函數(shù)處理此類問題。4. 特殊Number值在JavaScript中,Number類型還有一些特殊值如下。Infinity:正無窮大,在JavaScript使用Numer.POSITIVE_INFINITY表示。-Infinity:負無窮大,在JavaScript使用Numer.NEGATIVE_INFINITY表示。NaN :非數(shù)字,在JavaScript使用Numer.NaN表示。Number.MAX_VALUE:數(shù)值范圍允許的最大值,大約等于1.8e308Number.MIN_VALUE:數(shù)值范圍允許的最小值,大約等于5e-324(1) InfinityInfinity表示無窮大的含義,有正負之分。當數(shù)值超過了JavaScript允許的范圍就會顯示為Infinity(超過上限)或-Infinity(超過下限)。例如:varx=9e30000;alert(x);//因為該數(shù)字已經超出上限,返回值為Infinity在數(shù)字比較大小時,無論原數(shù)據(jù)值為多少,結果為Infinity的兩個數(shù)認為相等,而同樣兩個-Infinity也是相等的。例如:varx1=3e9000;varx2=9e3000;alert(x1==x2);//判斷變量x1與x2是否相等,返回值為true上述代碼中變量x1與x2的實際數(shù)據(jù)值并不相等,但是由于它們均超出了JavaScript可以接受的數(shù)據(jù)范圍,因此返回值均為Infinity,從而判斷是否相等時會返回true(真)。在JavaScript中使用數(shù)字0作為除數(shù)不會報錯,如果正數(shù)除以0返回值就是Infinity,負數(shù)除以0返回值為-Infinity,特殊情況0除以0的返回值為NaN(非數(shù)字)。例如:varx1=5/0;//返回值是Infinityvarx2=-5/0;//返回值是-Infinityvarx3=0/0;//返回值是NaNInfinity不可以與其他正常顯示的數(shù)字進行數(shù)學計算,返回結果均會是NaN。例如:varx=Numer.POSITIVE_INFINITY;varresult=x+99;alert(result);//返回值為NaN【例3-14】JavaScript特殊Number值Infinity的應用(2) NaNNaN表示的是非數(shù)字(NotaNumber),該數(shù)值用于表示數(shù)據(jù)轉換成Number類型失敗的情況,從而無需拋出異常錯誤。例如將String類型轉換為Number類型。NaN因為不是真正的數(shù)字,不能用于進行數(shù)學計算。并且即使兩個數(shù)值均為NaN,它們也并不相等。例如將英文單詞轉換為Number類型,就會導致轉換結果為NaN,具體代碼如下:varx="red";varresult=Number(x);//返回值為NaN,因為沒有對應的數(shù)值可以轉換JavaScript還提供了用于判斷數(shù)據(jù)類型是否為數(shù)值的方法isNaN(),其返回值是布爾值。當檢測的數(shù)據(jù)可以正確轉換為Number類型時返回真(true),其他情況返回假(false)。其語法規(guī)則如下:isNaN(變量名稱)例如:varx1="red";varresult1=isNaN(x1);//返回值是假(false)varx2="999";varresult2=isNaN(x2);//返回值是真(true)【例3-15】JavaScript特殊Number值NaN的應用3.1.5Boolean類型布爾值(boolean)在很多程序語言中都被用于進行條件判斷,其值只有兩種:true(真)或者false(假)。布爾類型的值可以直接使用單詞true或false,也可以使用表達式。例如:varanswer=true;varanswer=false;varanswer=(1>2);其中1>2的表達式不成立,因此返回結果為false(假)?!纠?-16】JavaScriptBoolean類型的簡單應用3.2JavaScript對象類型在JavaScript中,對象類型分為三種:本地對象、內置對象和宿主對象。本地對象(nativeobject)是ECMAScript定義的引用類型;內置對象(built-inobject)指的是無需實例化可直接使用的對象,其實也是特殊的本地對象;宿主對象(hostobject)指的是用戶的機器環(huán)境,包括DOM和BOM。3.2.1本地對象1. 數(shù)組Array在JavaScript中可以使用數(shù)組(Array)類型在單個變量中存儲一系列的值。例如:varmobile=newArray();varmobile[0]="蘋果";varmobile[1]="三星";varmobile[2]="華為";數(shù)組是從0開始計數(shù)的,因此第一個元素的下標是[0],后面每新增一個元素下標+1。使用Array類型存儲數(shù)組的特點是無需在一開始聲明數(shù)組的具體元素數(shù)量,可以在后續(xù)代碼中陸續(xù)新增數(shù)組元素。如果一開始就可以確定數(shù)組的長度,即其中的元素不需要后續(xù)動態(tài)加入,可直接寫成:varmobile=newArray("蘋果","三星","華為");或varmobile=["蘋果","三星","華為"];此時數(shù)組元素之間使用逗號隔開。Array對象還包含了length屬性,可以用于獲取當前數(shù)組的長度,即數(shù)組中的元素個數(shù)。如果當前數(shù)組中沒有包含元素,則length值為0。例如:varmobile=["蘋果","三星","華為"];varx=mobile.length;//這里x值為3Array對象還包含了一系列方法用于操作數(shù)組,常用方法如下。concat(array1,array2,…arrayN):用于在數(shù)組末尾處連接一個或多個新的數(shù)組或數(shù)組元素。其中參數(shù)一為必填內容,后面的參數(shù)個數(shù)不限,均為可選內容。參數(shù)內容可以是數(shù)組或數(shù)組元素的值。join(separator):把數(shù)組中的所有元素用指定的分隔符進行分割,并在同一個字符串中顯示出來。其中separator參數(shù)表示指定的自定義分隔符。該參數(shù)為可選內容,不填寫的情況下默認用逗號分隔。pop():刪除數(shù)組中的最后一個元素,并返回該元素的值。如果數(shù)組內容是空的,則該方法返回undefined,并且不進行操作。push(element1,element2,…elementN):在數(shù)組的結尾處插入一個或多個元素,并返回最新數(shù)組長度。其中參數(shù)一為必填,表示至少添加一個元素,后面的參數(shù)個數(shù)不限,均為可選內容。reverse() :用于將數(shù)組中的所有元素倒序重組。該方法會直接更改原始數(shù)組,而不是生成一個新的數(shù)組。shift():刪除數(shù)組中的第一個元素,并返回該元素的值。如果數(shù)組內容是空的,則該方法返回undefined,并且不進行操作。slice(start,end):用于返回數(shù)組中指定了開始與結束范圍的一系列元素。其中參數(shù)start為必填內容,表示從第幾個元素開始選取。參數(shù)end為可選內容,表示選取到第幾個元素結束,并且不包括該元素本身。如果沒有指定end參數(shù),則一直選取到數(shù)組的最后一個元素結束。這兩個參數(shù)如果填寫了負數(shù),則表示從數(shù)組末尾開始計算個數(shù)。例如-1表示最后一個元素,-2表示倒數(shù)第二個元素,依次類推。toString():用于把數(shù)組元素顯示在同一個的字符串中,并且用逗號分隔。相當于沒有指定分隔符的join()方法的用法。unshift(element1,…elementN):在數(shù)組的開頭插入一個或多個元素,并返回最新數(shù)組長度。其中參數(shù)一為必填,表示至少添加一個元素,后面的參數(shù)個數(shù)不限,均為可選內容?!纠?-17】JavaScriptArray對象的簡單應用【代碼說明】本示例分別使用了兩種不同的聲明方式創(chuàng)建數(shù)組,并在最后使用alert()語句在彈出提示框中顯示這兩個數(shù)組的內容。由圖可見,兩種聲明方式均可成功使用Array對象創(chuàng)建數(shù)組,并對數(shù)組元素進行賦值。2. 日期Date在JavaScript中使用Date對象處理時間日期有關內容。有四種初始化方式,列舉如下://表示獲取當前的日期與時間newDate();//使用表示日期時間的字符串定義時間,例如填入May10,200012:12:00newDate(dateString);//使用從1970年1月1日到指定日期的毫秒數(shù)定義時間,例如填入1232345newDate(milliseconds);//自定義年、月、日、時、分、秒和毫秒,時分秒和毫秒參數(shù)缺省情況默認為0newDate(year,month,day,hours,minutes,seconds,milliseconds);可以用Date對象一系列方法分別獲取指定的內容,Date對象的常見方法如下。Date() 獲取當前的日期和時間。getDate() 獲取Date對象處于一個月里面的哪一日(1-31)。getDay() 獲取Date對象處于星期幾(0-6),其中0表示星期日。getMonth() 獲取Date對象處于幾月份(0-11),從0開始計算表示一月份。getFullYear() 獲取Date對象的完整年份(4位數(shù))。getHours() 獲取Date對象的小時(0-23)。getMinutes() 獲取Date對象的分鐘(0-59)。getSeconds() 獲取Date對象的秒(0-59)。getTime() 返回1970年1月1日至今經歷的毫秒數(shù)。setDate() 重新設置Date對象中的日期,精確到天。setFullYear() 重新設置Date對象中的年份,年份必須為4位數(shù)完整表達。setHours() 重新設置Date對象中的小時(0-23)。setMinutes() 重新設置Date對象中的分鐘(0-59)。setMonth() 重新設置Date對象中的月份(0-11)。setSeconds() 重新設置Date對象中的秒(0-59)。setTime() 重新以1970年1月1日至今經歷的毫秒數(shù)設置Date對象。toDateString() 將Date對象的日期部分轉換為字符串。toLocaleDateString() 根據(jù)本地時間格式將Date對象的日期部分轉換為字符串。toLocaleTimeString() 根據(jù)本地時間格式將Date對象的時間部分轉換為字符串。toLocaleString() 根據(jù)本地時間格式將Date對象的日期和時間轉換為字符串。toUTCString() 根據(jù)世界時間格式將Date對象的日期和時間轉換為字符串?!纠?-18】JavaScriptDate對象的簡單應用【代碼說明】本示例聲明了當前的時間日期對象date,然后分別獲取其中的年、月、日與星期,并使用alert()語句在彈出的提示框中顯示組合內容。由于月份的取值范圍是0-11,因此如果需要顯示實際月份,需要將獲取到的月份值再進行加1處理。3. 正則表達式RegExpRegExp對象表示正則表達式(RegularExpression),通常用于檢索文本中是否包含指定的字符串。其語法格式如下:newRegExp(pattern[,attributes])參數(shù)解釋如下:pattern:該參數(shù)為字符串形式,用于規(guī)定正則表達式的匹配規(guī)則或填入其他正則表達式。attributes:該參數(shù)為可選參數(shù),可包含屬性值g、i或者m,分別表示全局匹配、區(qū)分大小寫匹配與多行匹配。例如:varpattern=newRegExp([0-9],g);上述代碼表示聲明了一個用于全局檢索文本中是否包含數(shù)字0-9之間任意字符的正則表達式。還有一種簡寫形式,格式如下:/pattern/[attribute]因此前面用于全局檢索數(shù)字0-9的正則表達式聲明可修改為如下內容:varpattern=/[0-9]/g;兩種寫法效果完全相同。需要注意的是,這兩種情況下的參數(shù)attributes均僅適用于參數(shù)pattern為匹配規(guī)則字符串的情況。如果參數(shù)pattern填寫的是其他正則表達式,則參數(shù)attributes必須省略不寫。JavaScript中常用的正則表達式如表3-7所示。表3-7JavaScript常用正則表達式一覽括號表達式解釋[0-9]查找0-9之間的數(shù)字。[a-z]查找從小寫字母a到小寫字母z之間的字符。[A-Z]查找從大寫字母A到大寫字母Z之間的字符。[A-z]查找從大寫字母A到小寫字母z之間的字符。[abc]查找括號之間的任意一個字符。[^abc]查找括號內字符之外的所有內容。(red|blue|green)查找“|”符號間隔的任意選項內容量詞表達式解釋n+查找任何包含至少一個n的字符串。n*查找任何包含至少一個n的字符串。n?查找任何包含0-1個n的字符串。n{X}查找包含X個n的字符串。n{X,Y}查找包含X或Y個n的字符串。n{X,}查找至少包含X個n的字符串。n$查找任何以n結束的字符串。^n查找任何以n開頭的字符串。?=n查找任何后面緊跟字符n的字符串。?!n查找任何后面沒有緊跟字符n的字符串。元字符解釋.查找除了換行符與行結束符以外的單個字符。\w查找單詞字符。w表示word(單詞)。\W查找非單詞字符。\d查找數(shù)字字符。d表示digital(數(shù)字)。\D查找非數(shù)字字符。\s查找空格字符。s表示space(空格)。\S查找非空格字符。\n查找換行符。\f查找換頁符。\r查找回車符。\t查找制表符。\xxx查找八進制數(shù)字xxx對應的字符,如果沒有找到則返回null。例如\130表示的是大寫字母X。\xdd查找十六進制數(shù)字dd對應的字符,如果沒有找到則返回null。例如\x58表示的是大寫字母X。\uxxxx查找十六進制數(shù)字xxxx對應的Unicode字符,如果沒有找到則返回null。例如\u0058表示的是大寫字母X。注:其中量詞表達式中的n可以替換成其他任意字符。在RegExp對象創(chuàng)建完畢后,有兩種方法可以用于檢索文本。exec():該方法適用于具有參數(shù)的情況,每次運行都按照順序從文本中找到對應的字符串。直到全部找完,再次運行會返回null值。test():用于檢索文本中是否包含指定的字符串。(1) exec()方法的應用exec()方法用于檢索文本中匹配正則表達式的字符串內容。其語法格式如下:RegExpObject.exec(string)該方法如果找到了匹配內容,其返回值為存放有檢索結果的數(shù)組;如果未找到任何匹配內容,則返回null值。例如:varpattern=newRegExp("e");//檢索文本中是否包含小寫字母e的正則表達式varresult1=pattern.exec("Hello");//返回值為e,因為字符串中包含小寫字母evarresult2=pattern.exec("Hello");//返回值為null,因為字符串后續(xù)內容中不包含小寫字母e如果查到內容較多,可以使用while循環(huán)語句進行檢索。例如:vars="Helloeveryone";//初始字符串varpattern=newRegExp("e");//檢索文本中是否包含小寫字母e的正則表達式varresult;//用于獲取每次檢索結果//while循環(huán)while((result=pattern.exec(s))!=null){alert(result);//輸出本次檢索結果}關于while循環(huán)的更多內容可查閱本章4.11循環(huán)語句?!纠?-19】JavaScript正則表達式exec()方法的簡單應用使用exec()匹配符合正則表達式的字符串。(2) test()方法的應用test()方法用于檢測文本中是否包含指定的正則表達式內容,返回值為布爾值。其語法格式如下:RegExpObject.test(string)其中RegExpObject指的是自定義的RegExp對象;參數(shù)string指的是需要被檢索的文本全部內容。如果文本中包含該RegExp對象指定的內容,返回值為true,否則返回值為false。該方法只用于無參數(shù)的情況,并且只檢索一次,一旦檢索到了就停止并提供返回值。例如:varpattern=newRegExp("e");//檢索文本中是否包含小寫字母e的正則表達式varresult=pattern.test("Hello");//返回值為true,因為字符串中包含小寫字母e【例3-20】JavaScript正則表達式test()方法的簡單應用使用test()匹配符合正則表達式的字符串。4. 對象Object在JavaScript中,所有類型都是對象,例如字符串、數(shù)字、數(shù)組等,這些可以帶有屬性和方法的變量稱為對象。例如String對象包含了length屬性用于獲取字符串長度,也包含了subtring()、indexOf()等方法用于處理字符串。屬性是與對象相關的值,方法是對象可執(zhí)行的動作。例如,將學生作為現(xiàn)實中的對象,他具有學號、姓名、班級、專業(yè)等屬性值,也可以具有選課、學習和考試等行為動作。在JavaScript中創(chuàng)建student對象的寫法如下:varstudent=newObject();="張三";//姓名student.id="2016010212";//學號student.major="計算機科學與技術";//專業(yè)//學習方法student.study=function(){alert("開始學習");};上述代碼為student對象添加了name、id和major屬性和study()方法,分別用于表示學生的姓名、學號、專業(yè)屬性和學習的行為動作。對象名稱為自定義,其內部的屬性和方法也均可以根據(jù)實際需要自定義名稱與數(shù)量。獲取對象中的指定屬性有兩種方法,一是對象變量名稱后面加點(.)和屬性名稱(對象名.屬性名);二是對象變量名稱后面使用中括號和引號包圍屬性名稱(對象名["屬性名"])。仍然以上面的student對象為例,獲取其中學生姓名的寫法如下:varresult=;或varresult=student["name"];還可以用該方法直接修改對象中的屬性值,例如將之前的學生姓名張三換成新內容:="李四";alert();//此時輸出結果不再是張三,而是修改后的李四?!纠?-21】JavaScriptObject對象的簡單應用創(chuàng)建自定義名稱的Object對象。3.2.2內置對象1. Gobal對象在JavaScript中Gobal對象又稱為全局對象,其中包含的屬性和函數(shù)可以用于所有的本地JavaScript對象。Gobal對象的全局屬性和方法分別如表3-9和3-10所示。表3-9Gobal對象的全局屬性一覽表屬性名稱解釋Infinity表示正無窮大的數(shù)值,在數(shù)值超過了JavaScript規(guī)定的范圍時使用。java表示引用的一個java包,是Packages.java的簡寫。NaN表示非數(shù)值(NotaNumber),通常在其他類型轉換成Number類型時使用。Packages表示JavaPackage對象,是所有java包的根。undefined表示未聲明或未賦值的變量值。表3-10Gobal對象的全局方法一覽表屬性名稱解釋decodeURI()解碼URI。decodeURIComponent()解碼URI組件。encodeURI()把字符串編碼為URI。encodeURIComponent()把字符串編碼為URI組件。escape()對字符串進行編碼。eval()將JavaScript字符串轉換為腳本代碼。getClass()返回Java對象的類。isFinite()判斷某個值是否為無窮大。isNaN()判斷值是否為數(shù)字。Number()把對象的值轉換為數(shù)字類型。parseInt()把字符串轉換為整數(shù)。parseFloat()把字符串轉換為浮點數(shù)。String()把對象的值轉換為字符串類型。unescape()對使用escape()編碼的字符串進行解碼。2. Math對象在JavaScript中Math對象用于數(shù)學計算,無需初始化創(chuàng)建,可以直接使用關鍵詞Math調用其所有的屬性和方法。Math對象的常用屬性和常用方法分別如表3-11和表3-12所示。表3-11Math對象的常用屬性屬性名稱解釋E返回算術常量e(約為2.718)。LN2返回Log以算術常量e為底的2的對數(shù)(約為0.693)。LN10返回Log以算術常量e為底的10的對數(shù)(約為2.302)。LOG2E返回Log以2為底的算術常量e的對數(shù)(約為1.414)。LOG10E返回Log以10為底的算術常量e的對數(shù)(約為0.434)。PI返回圓周率π的值(約為3.1415926)。SQRT1_2返回數(shù)字2的平方根的倒數(shù)(約為0.707)。SQRT2返回數(shù)字2的平方根(約為1.414)。表3-12Math對象的常用方法方法名稱解釋使用示例示例中result的值abs(x)返回數(shù)字的絕對值。varx=-100;varresult=abs(x);100ceil(x)使用進一法返回整數(shù)值,即舍去小數(shù)點和后面的所有內容,整數(shù)部分加1。varx=3.1415;varresult=ceil(x);4cos(x)返回數(shù)字的余弦值,x指的是弧度值。varx=Math.PI/2;varresult=cos(x);0floor(x)使用去尾法返回整數(shù)值,即舍去小數(shù)點和后面的所有內容,整數(shù)部分不變。varx=3.1415;varresult=floor(x);3max(x,y)返回兩個數(shù)之間的最大值。varx=2,y=3;varresult=max(x,y);3min(x,y)返回兩個數(shù)之間的最小值。varx=2,y=3;varresult=min(x,y);2pow(x,y)返回x的y次方。varx=2,y=3;varresult=pow(x,y);8random()返回[0,1)之間的隨機數(shù)。varresult=random();0-1之間的隨機浮點數(shù)。round(x)返回數(shù)字四舍五入后的整數(shù)。varx=3.1415;varresult=round(x);3sin(x)返回數(shù)字的正弦值,x指的是弧度值。varx=Math.PI/2;varresult=sin(x);1sqrt(x)返回數(shù)字的平方根。varx=9;varresult=sqrt(x);3tan(x)返回數(shù)字的正切值,x指的是弧度值。varx=Math.PI/4;varresult=tan(x);1注:角度值360°相當于弧度值2π?!纠?-22】JavaScriptMath對象的簡單應用使用Math對象中的部分屬性和方法計算球體的體積,公式為V=4/3πR3。3.2.3宿主對象宿主對象包括HTMLDOM(文檔對象模型)和BOM(瀏覽器對象模型)。具體內容和用法請參考第6章。3.3JavaScript類型轉換3.3.1轉換成字符串在JavaScript中,布爾值類型(Boolean)和數(shù)字類型(Number)這兩種基本數(shù)據(jù)類型均可使用toString()方法把值轉換為字符串形式。布爾值類型(Boolean)的toString()方法只能根據(jù)初始值返回true或者false。例如:varx=true;varresult=x.toString();//返回"true"而數(shù)字類型(Number)使用toString()方法有兩種模式,分別稱為默認模式和基數(shù)模式。在默認模式中,toString()不帶參數(shù)直接使用,此時無論是整數(shù)、小數(shù)或者科學計數(shù)法表示的內容,都會顯示為十進制的數(shù)值。例如:varx1=99;varx2=99.90;varx3=1.25e8;varresult1=x1.toString();//返回值為"99"varresult2=x2.toString();//返回值為"99.9"varresult3=x3.toString();//返回值為"125000000"如果小數(shù)點后面是以0結束,那么在轉換成String類型時最末端的0都會被省略,本例中變量x2的返回值就是"99.9",而不是原始的"99.90";而使用科學計數(shù)法表示的數(shù)值也會顯示成計算后的十進制完整結果,本例中變量x3的返回值就是"125000000",而不是"1.25e8"本身。在基數(shù)模式下,需要在toString()方法的括號內部填入一個指定的參數(shù),根據(jù)參數(shù)指示把原始數(shù)據(jù)轉換為二進制、八進制或十六進制數(shù)。其中二進制對應基數(shù)2,八進制對應基數(shù)8,十六進制對應基數(shù)16。例如:varx=10;varresult1=x.toString(2);//聲明將原始數(shù)據(jù)轉換成二進制數(shù),返回值為"1010"varresult2=x.toString(8);//聲明將原始數(shù)據(jù)轉換成八進制數(shù),返回值為"12"varresult3=x.toString(16);//聲明將原始數(shù)據(jù)轉換成十六進制數(shù),返回值為"A"由此可見,對于同一個變量使用toString()方法進行轉換,如果填入的基數(shù)不同會導致返回完全不同的結果?!纠?-23】JavaScript轉換字符串類型的簡單應用使用toString()方法將變量值轉換為字符串類型。3.3.2轉換成數(shù)字JavaScript提供了兩種將String類型轉換為Number類型的方法:parseInt()和parseFloat(),其中parseInt()用于將值轉換為整數(shù),parseFloat()用于將值轉換為浮點數(shù)。這兩種方法僅適用于對String類型的數(shù)字內容轉換,其他類型的返回值都是NaN。1. parseInt()方法parseInt()方法轉換的原理是從左往右依次檢查每個位置上的字符,判斷該位置上是否是有效數(shù)字,如果是則將有效數(shù)字轉換為Number類型,直到發(fā)現(xiàn)不是數(shù)字的字符,則停止后續(xù)的檢查工作。例如:varx="123hello";varresult=parseInt(x);//返回值是123,因為h不是有效數(shù)字,則停止檢查如果需要轉換的字符串從第一個位置上就不是有效數(shù)字,則直接返回NaN。例如:varx="hello";varresult=parseInt(x);//返回值是NaN,因為第一個字符h就不是有效數(shù)字,直接停止檢查由于parseInt只能進行整數(shù)數(shù)字的轉換,因此檢測到某個字符位置上是小數(shù)點也會認為不是有效數(shù)字,從而終止檢測和轉換。例如:varx="3.14";varresult=parseInt(x);//返回值是3,因為小數(shù)點不是有效數(shù)字,則停止檢查parseInt()方法還有一個可選的參數(shù)二,可以用于聲明需要轉換的數(shù)字為二進制、八進制、十進制、十六進制等。例如:varx="10";varresult1=parseInt(x,2);//表示原始數(shù)據(jù)為二進制,返回值為2varresult2=parseInt(x,8);//表示原始數(shù)據(jù)為八進制,返回值為8varresult3=parseInt(x,10);//表示原始數(shù)據(jù)為十進制,返回值為10varresult4=parseInt(x,16);//表示原始數(shù)據(jù)為十六進制,返回值為16有一種特殊情況需要注意:如果原始數(shù)據(jù)為十進制數(shù),但是前面包含數(shù)字0開頭,則最好使用參數(shù)二進行特別強調,否則會被默認轉換為八進制數(shù)。例如:varx="010";varresult1=parseInt(x);//表示原始數(shù)據(jù)為八進制,返回值為8varresult2=parseInt(x,10);//表示原始數(shù)據(jù)為十進制,返回值為10varresult3=parseInt(x,8);//表示原始數(shù)據(jù)為八進制,返回值為8因此如果是聲明十進制數(shù),盡量避免使用0作為開頭的寫法?!纠?-24】JavaScript轉換整數(shù)類型的簡單應用使用parseInt()方法將變量值轉換為整數(shù)類型?!敬a說明】本示例聲明了變量x并賦值為字符串"3.99"作為測試用例,變量result1的返回值為直接使用加號(+)連接變量x和數(shù)字1的結果;變量result2的返回值為使用parseInt()方法對變量x進行類型轉換后再與數(shù)字1相加的結果。由圖可見,當直接使用加號(+)時會默認為是兩個字符串的連接,并沒有進行加法計算。只有先將變量x轉換為整數(shù)類型后才進行了數(shù)學運算,其中字符串"3.99"轉換后為數(shù)字3。這是由于加號的特殊性,既可以做數(shù)學運算符號也可以作為字符串的連接符號。2. parseFloat()方法parseFloat()方法的轉換原理與parseInt()方法類似,都是從左往右依次檢查每個位置上的字符,判斷該位置上是否是有效數(shù)字,如果是則將有效數(shù)字轉換為Number類型,直到發(fā)現(xiàn)不是數(shù)字的字符,則停止后續(xù)的檢查工作。與parseInt()方法類似,如果需要轉換的字符串從第一個位置上就不是有效數(shù)字,則直接返回NaN。例如:varx="hello3.14";varresult=parseFloat(x);//返回值是NaN,因為第一個字符h就不是有效數(shù)字,則停止檢查但是與parseInt()方法不同的是,小數(shù)點在parseInt()方法中也認為是無效字符,但是在parseFloat()方法中首次出現(xiàn)的小數(shù)點也被認為是有效的。例如:varx="3.14hello";varresult=parseFloat(x);//返回值是3.14,因為h不是有效數(shù)字,則停止檢查如果同時出現(xiàn)多次小數(shù)點,也只有第一個小數(shù)點是有效的。例如:varx="26";varresult=parseFloat(x);//返回值是3.14,因為第二個小數(shù)點不是有效數(shù)字,則停止檢查和parseInt()還有一個不同之處在于:parseFloat()方法只允許接受十進制的表示方法,而parseInt()方法允許轉換二進制、八進制和十六進制數(shù)。因此八進制數(shù)如果是最前面帶有數(shù)字0的形式,會直接忽略0轉換為普通十進制數(shù)。例如:varx="010";varresult1=parseInt(x);//默認為是八進制數(shù),返回值為8varresult2=parseFloat(x);//默認為是十進制數(shù),返回值為10而十六進制數(shù)中如果出現(xiàn)字母則直接按照字面的意思認為是無效的字符串。例如:varx="A";varresult1=parseInt(x,16);//parseInt()允許十六進制數(shù),返回值為10varresult2=parseFloat(x);//parseFloat()不允許十六進制數(shù),返回值為NaN【例3-25】JavaScript轉換浮點數(shù)類型的簡單應用使用parseFloat()方法將變量值轉換為浮點數(shù)類型。3.3.3強制類型轉換一些特殊的值無法使用toString()、parseInt()或parseFloat()方法進行轉換,例如null、undefined等。此時可以使用JavaScript中的強制轉換(TypeCasting)對其進行轉換。在JavaScript中有三種強制類型轉換函數(shù),解釋如下: Boolean(value):把指定的值強制轉換為布爾值。 Number(value):把指定的值強制轉換為數(shù)值(整數(shù)或浮點數(shù))。 String(value):把指定的值強制轉換為字符串。1. Boolean()函數(shù)JavaScript中所有其他類型都可以使用類型轉換函數(shù)Boolean()轉換成布爾值,再進行后續(xù)計算。當需要轉換的值為非空字符串時,Boolean()函數(shù)的返回值為true;而當需要轉換的值為空字符串時會返回false。例如:varresult1=Boolean("hello");//非空字符串的返回值為truevarresult2=Boolean("");//空字符串的返回值為false當需要轉換的值為數(shù)字時,整數(shù)0的返回值為false,其余所有整數(shù)與浮點數(shù)的返回值為true。例如:varresult1=Boolean(0);//數(shù)字0的返回值為falsevarresult2=Boolean(999);//非0整數(shù)的返回值為truevarresult3=Boolean(3.14);//浮點數(shù)的返回值為true當需要轉換的值為null或undefined時,Boolean()函數(shù)的返回值均為false。例如:varresult1=Boolean(null);//返回值為falsevarresult2=Boolean(undefined);//返回值為false當需要轉換的值本身就是布爾值時,會轉換成原本的值。例如:varresult1=Boolean(true);//返回值為truevarresult2=Boolean(false);//返回值為false2. Number()函數(shù)在JavaScript中Number()函數(shù)可以將任意類型的值強制轉換為數(shù)字類型。當需要轉換的內容為符合語法規(guī)范的整數(shù)或小數(shù)時,Number()將調用對應的parseInt()或parseFloat()方法進行轉換。例如:varx=Number("2");//返回值為整數(shù)2vary=Number("2.9");//返回值為浮點數(shù)2.9當需要轉換的值為布爾值時,true會轉換為整數(shù)1,false會轉換為整數(shù)0。例如:varx=Number(true);//返回值為整數(shù)1vary=Number(false);//返回值為整數(shù)0與直接使用parseInt()和parseFloat()方法進行數(shù)字類型轉換不同的是,如果需要轉換的值為數(shù)字后面跟隨超過一個小數(shù)點或其他無效字符時,Number()會返回NaN。例如:varx="2.12.13";varresult1=parseInt(x);//返回值為整數(shù)2varresult2=parseFloat(x);//返回值為浮點數(shù)2.12varresult3=Number(x);//返回值為NaN當需要轉換的值為null或undefined時,Number()函數(shù)分別返回0和NaN。例如:varx1=null;//null值varx2;//undefined值varresult1=Number(x1);//返回整數(shù)0varresult2=Number(x2);//返回NaN當需要轉換的值為其他自定義對象時,返回值均為NaN。例如:varstudent=newObject();varresult=Number(student);//返回NaN3. String()函數(shù)在JavaScript中String()函數(shù)可以將任意類型的值強制轉換為字符串類型并保留字面內容,這與toString()的轉換方法類似。與toString()方法不同之處在于,String()函數(shù)還可以將null、undefined類型強制轉換為字符串類型。例如:varx=null;varresult1=String(x);//返回值為字符串"null"varresult2=x.toString();//發(fā)生錯誤,無返回值3.4JavaScript運算符3.4.1賦值運算符在JavaScript中,運算符=專門用來為變量賦值,因此也稱為賦值運算符。在聲明變量時可以使用賦值運算符對其進行初始化,例如:varx1=9;//為變量x1賦值為整數(shù)9varx2="hello";//為變量x2賦值為字符串"hello"也可以使用賦值運算符將已存在的變量值賦值給新的變量,例如:varx1=9;//為變量x1賦值為整數(shù)9varx2=x1;//將變量x1的值賦值給新聲明的變量x2還可以使用賦值運算符為多個變量連續(xù)賦值,例如:varx=y=z=99;//此時變量x、y、z的賦值均為整數(shù)99賦值運算符的右邊還可以接受表達式,例如:varx=100+20;//此時變量x將賦值為120這里使用了加法(+)運算符形成的表達式,在運行過程中會優(yōu)先對表達式進行計算,然后再對變量x進行賦值。加法運算符屬于算術運算符的一種,下一節(jié)將介紹常用的各類算術運算符。3.4.2算術運算符在JavaScript中所有的基本算術均可以使用對應的算術運算符完成,包括加減乘除和求余等。算術運算符的常見用法如表3-13所示。表3-13算術運算符的常見用法運算符解釋示例變量result返回值+加號,將兩端的數(shù)值相加求和。varx=3,y=2;varresult=x+y;5-減號,將兩端的數(shù)值相減求差。varx=3,y=2;varresult=x-y;1*乘號,將兩端的數(shù)值相乘求積。varx=3,y=2;varresult=x*y;6/除號,將兩端的數(shù)值相除求商。varx=4,y=2;varresult=x/y;2%求余符號,將兩端的數(shù)值相除求余數(shù)。varx=3,y=2;varresult=x%y;1++自增符號,數(shù)字自增1varx=3;x++;varresult=x;4--自減符號,數(shù)字自減1varx=3;x--;varresult=x;2其中加號還有一個特殊用法:可用于連接文本內容或字符串變量。例如:vars1="Hello";vars2="JavaScript";vars3=s1+s2;//結果會是HelloJavaScript如果將字符串和數(shù)字用加號相加,則會先將數(shù)字轉換為字符串,再進行連接。例如:vars="Hello";varx=2016;varresult=s+x;//結果會是Hello2016上述代碼中即使字符串本身也是數(shù)字內容,使用加號連接仍然不會進行數(shù)學運算。例如:vars="2015";varx=2016;varresult=s+x;//結果會是20152016,而不是兩個數(shù)字相加的和將賦值運算符(等號)和算術運算符(加、減、乘、除、求余數(shù))結合使用,可以達到簡寫的效果。具體用法如下。運算符組合 格式解釋+= x+=y 等同于x=x+y-= x-=y 等同于x=x-y*= x*=y 等同于x=x*y/= x/=y 等同于x=x/y%= x%=y 等同于x=x%y3.4.3邏輯運算符邏輯運算符有三種類型:NOT(邏輯非)、AND(邏輯與)和OR(邏輯或)。邏輯運算符使用的符號與對應關系如下。! :邏輯非,表示對布爾值結果再次反轉。例如原先為true,加上!符號后返回值就變?yōu)閒alse。&& :邏輯與,表示并列關系。必須在&&符號前后條件均為true,返回值才為true。只要有任何一個條件為false,返回值均為false。|| :邏輯或,表示二選一的關系。在||符號前后條件只要有一個為true,返回值就為true。如果兩個條件都為false,則返回值才為false。在進行邏輯運算之前,JavaScript中自帶的抽象操作ToBoolean會將運算條件轉換為邏輯值。轉換規(guī)則如表3-16所示。表3-16ToBoolean的轉換規(guī)則值示例轉換結果布爾值真(true)varx=true;維持原狀,仍為true布爾值假(false)varx=false;維持原狀,仍為falsenullvarx=null;falseundefinedvarx=undefined;false非空字符串varx="Hello";true空字符串varx="";false數(shù)字0varx=0;falseNaNvarx=NaN;false其他數(shù)字(非0或NaN)varx=99;true對象varstudent=newObject();true1. 邏輯非運算符(NOT)在JavaScript中,邏輯非運算符號與C語言和Java語言都相同,使用感嘆號(?。┎⒎胖迷谶\算內容左邊表示。邏輯非運算符的返回值只能是布爾值,即true或者false。邏輯非的運算規(guī)則如表3-17所示。表3-17邏輯非運算符的規(guī)則一覽表運算數(shù)類型示例返回值數(shù)字0varresult=!0;true其他非0的數(shù)字varresult=!99;false對象varstudent=newObject();varresult=!student;false空值nullvarx=null;varresult=!x;trueNaNvarx=NaN;varresult=!x;true未賦值undefinedvarx;varresult=!x;true2. 邏輯與運算符(AND)在JavaScript中,邏輯與運算符使用雙和符號(&&)表示,用于連接符號前后的兩個條件判斷,表示并列關系。當兩個條件均為布爾值時,邏輯與的運算結果也是布爾值(true或者false)。判斷結果如表3-18所示。表3-SEQ表4-\*ARABIC18邏輯與(&&)的布爾值對照表條件1條件2返回值真(true)真(true)真(true)真(true)假(false)假(false)假(false)真(true)假(false)假(false)假(false)假(false)由表可見,在條件1和條件2本身均為布爾值的前提條件下,只有當兩個條件均為真時(true),邏輯與的返回值才為真(true);只要有一個條件為假(false),邏輯與的返回值均為假(false)。還有一種特殊情況:當條件1為假(false)時,無論條件2是任何內容(例如null值、undefined、數(shù)字、對象等),最終返回值都是假(false)。原因是邏輯與有簡便運算的特性,即如果第一個條件為假(false)的話,直接判斷邏輯與的運行結果為假(false),不再執(zhí)行第二個條件。例如:varx1=false;varresult=x1&&x2;//因為x1為false,可以忽略x2直接判斷最終結果alert(result);//該語句執(zhí)行結果為false由于條件1為false,邏輯與會直接判定最終結果為false,直接忽略條件2。因此即使本例中條件2的變量未聲明都不影響代碼的運行。但是如果條件1為真(true),無法判斷最終結果,此時仍然需要判斷條件2。例如上述示例中修改變量x1的值為真(true),代碼如下:varx1=true;varresult=x1&&x2;//因為未聲明變量x2,因此執(zhí)行時發(fā)生錯誤alert(result);//該語句不會被執(zhí)行此時由于邏輯與需要判斷條件2的值,因此會發(fā)現(xiàn)變量x2從未被聲明過,從而執(zhí)行時發(fā)生錯誤,導致后續(xù)語句不再會被執(zhí)行。如果存在某個條件是數(shù)字類型,則先將其轉換為布爾值再繼續(xù)判斷。其中數(shù)字0對應的是假(false),其他非0的數(shù)字對應的都是真(true)。例如:varx1=0;//對應的是falsevarx2=99;//對應的是truevarresult=x1&&x2;//結果是false邏輯與運算符的返回值不一定是布爾值,如果其中某個條件的返回值不是布爾值,有可能出現(xiàn)其他返回值。邏輯非的運算規(guī)則如表3-19所示。表3-SEQ表4-\*AR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《建設工程施工合同示范文本》
- 幼兒園健康教案《五官很重要》及教學反思
- 2025年運載火箭控制系統(tǒng)仿真實時處理系統(tǒng)合作協(xié)議書
- 后勤部門工作參考計劃
- 2025年聚甲醛、聚甲醛合金及改性材料項目發(fā)展計劃
- 大型型貨車租賃合同書
- 特別贊助協(xié)議書
- 國際航運船只租賃合同
- 商場租賃合同書
- 2025年古馬隆樹脂項目建議書
- 2025年高考化學二、三輪復習策略講座
- 2022年高考數(shù)學試卷(上海)(秋考)(空白卷)
- 湖南省長沙市2023-2024學年四年級上冊期末數(shù)學試題
- 山東省濟南市語文小升初2024年模擬試題與參考答案
- 裝配式建筑復習試題及答案
- 空氣動力學仿真技術:湍流模型:k-ε湍流模型原理與應用
- 榛子食品深加工生產項目可行性研究報告-2024年重點項目
- 支撐梁拆除安全協(xié)議書
- 2024-2030年中國充血性心力衰竭(CHF)治療設備行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 高中期末考試考風考紀及誠信教育
- 小學語文大單元設計論文
評論
0/150
提交評論