高級(jí)JavaScript筆記_第1頁(yè)
高級(jí)JavaScript筆記_第2頁(yè)
高級(jí)JavaScript筆記_第3頁(yè)
高級(jí)JavaScript筆記_第4頁(yè)
高級(jí)JavaScript筆記_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、typeof 運(yùn)算符typeof 運(yùn)算符有一個(gè)參數(shù),即要檢查的變量或值 alert (typeof sTemp);對(duì)變量或值調(diào)用 typeof 運(yùn)算符將返回下列值之一:undefined - 如果變量是 Undefined 類型的boolean - 如果變量是 Boolean 類型的number - 如果變量是 Number 類型的string - 如果變量是 String 類型的object - 如果變量是一種引用類型或 Null 類型的注釋:您也許會(huì)問,為什么 typeof 運(yùn)算符對(duì)于 null 值會(huì)返回 "Object"。這實(shí)際上是 JavaScript 最初實(shí)現(xiàn)中的

2、一個(gè)錯(cuò)誤,然后被 ECMAScript 沿用了?,F(xiàn)在,null 被認(rèn)為是對(duì)象的占位符,從而解釋了這一矛盾,但從技術(shù)上來說,它仍然是原始值。Undefined 類型當(dāng)聲明的變量未初始化時(shí),該變量的默認(rèn)值是 undefined。undefined 是聲明了變量但未對(duì)其初始化時(shí)賦予該變量的值Null 類型null 則用于表示尚未存在的對(duì)象Boolean 類型Boolean 類型是 ECMAScript 中最常用的類型之一。它有兩個(gè)值 true 和 false (即兩個(gè) Boolean 字面量)Number 類型直接輸入的(而不是從另一個(gè)變量訪問的)任何數(shù)字都被看做 Number 類型的字面量。Str

3、ing 類型字符串字面量是由雙引號(hào)(")或單引號(hào)(')聲明的。toString() 方法3 種主要的原始類型 Boolean 值、數(shù)字和字符串都有 toString() 方法,可以把它們的值轉(zhuǎn)換成字符串。Boolean 類型的 toString() 方法只是輸出 "true" 或 "false"對(duì)數(shù)字調(diào)用 toString(10) 與調(diào)用 toString() 相同,它們返回的都是該數(shù)字的十進(jìn)制形式。parseFloat()parseFloat() 方法與 parseInt() 方法的處理方式相似,從位置 0 開始查看每個(gè)字符,直到找到

4、第一個(gè)非有效的字符為止,然后把該字符之前的字符串轉(zhuǎn)換成整數(shù)。不過,對(duì)于這個(gè)方法來說,第一個(gè)出現(xiàn)的小數(shù)點(diǎn)是有效字符。如果有兩個(gè)小數(shù)點(diǎn),第二個(gè)小數(shù)點(diǎn)將被看作無(wú)效的。parseFloat() 會(huì)把這個(gè)小數(shù)點(diǎn)之前的字符轉(zhuǎn)換成數(shù)字。這意味著字符串 "11.22.33" 將被解析成 11.22。使用 parseFloat() 方法的另一不同之處在于,字符串必須以十進(jìn)制形式表示浮點(diǎn)數(shù),而不是用八進(jìn)制或十六進(jìn)制。該方法會(huì)忽略前導(dǎo) 0,所以八進(jìn)制數(shù) 0102 將被解析為 102。對(duì)于十六進(jìn)制數(shù) 0xA,該方法將返回 NaN,因?yàn)樵诟↑c(diǎn)數(shù)中,x 不是有效字符。(注釋:經(jīng)測(cè)試,具體的瀏覽器實(shí)現(xiàn)會(huì)

5、返回 0,而不是 NaN。)此外,parseFloat() 方法也沒有基模式。下面是使用 parseFloat() 方法的一些示例:var fNum1 = parseFloat("12345red");/返回 12345var fNum2 = parseFloat("0xA");/返回 NaNvar fNum3 = parseFloat("11.2");/返回 11.2var fNum4 = parseFloat("11.22.33");/返回 11.22var fNum5 = parseFloat("0

6、102");/返回 102var fNum1 = parseFloat("red");/返回 NaN強(qiáng)制類型轉(zhuǎn)換ECMAScript 中可用的 3 種強(qiáng)制類型轉(zhuǎn)換如下:Boolean(value) - 把給定的值轉(zhuǎn)換成 Boolean 型;當(dāng)要轉(zhuǎn)換的值是至少有一個(gè)字符的字符串、非 0 數(shù)字或?qū)ο髸r(shí),Boolean() 函數(shù)將返回 true。如果該值是空字符串、數(shù)字 0、undefined 或 null,它將返回 false??梢杂孟旅娴拇a測(cè)試 Boolean 型的強(qiáng)制類型轉(zhuǎn)換:var b1 = Boolean("");/false - 空字符

7、串var b2 = Boolean("hello");/true - 非空字符串var b1 = Boolean(50);/true - 非零數(shù)字var b1 = Boolean(null);/false - nullvar b1 = Boolean(0);/false - 零var b1 = Boolean(new object();/true - 對(duì)象Number(value) - 把給定的值轉(zhuǎn)換成數(shù)字(可以是整數(shù)或浮點(diǎn)數(shù));Number() 函數(shù)的強(qiáng)制類型轉(zhuǎn)換與 parseInt() 和 parseFloat() 方法的處理方式相似,只是它轉(zhuǎn)換的是整個(gè)值,而不是部分值

8、。還記得嗎,parseInt() 和 parseFloat() 方法只轉(zhuǎn)換第一個(gè)無(wú)效字符之前的字符串,因此 "1.2.3" 將分別被轉(zhuǎn)換為 "1" 和 "1.2"。用 Number() 進(jìn)行強(qiáng)制類型轉(zhuǎn)換,"1.2.3" 將返回 NaN,因?yàn)檎麄€(gè)字符串值不能轉(zhuǎn)換成數(shù)字。如果字符串值能被完整地轉(zhuǎn)換,Number() 將判斷是調(diào)用 parseInt() 方法還是 parseFloat() 方法。下表說明了對(duì)不同的值調(diào)用 Number() 方法會(huì)發(fā)生的情況:用法結(jié)果Number(false)0Number(true)1Nu

9、mber(undefined)NaNNumber(null)0Number("1.2")1.2Number("12")12Number("1.2.3")NaNNumber(new object()NaNNumber(50)50String(value) - 把給定的值轉(zhuǎn)換成字符串;最后一種強(qiáng)制類型轉(zhuǎn)換方法 String() 是最簡(jiǎn)單的,因?yàn)樗砂讶魏沃缔D(zhuǎn)換成字符串。要執(zhí)行這種強(qiáng)制類型轉(zhuǎn)換,只需要調(diào)用作為參數(shù)傳遞進(jìn)來的值的 toString() 方法,即把 12 轉(zhuǎn)換成 "12",把 true 轉(zhuǎn)換成 "t

10、rue",把 false 轉(zhuǎn)換成 "false",以此類推。強(qiáng)制轉(zhuǎn)換成字符串和調(diào)用 toString() 方法的唯一不同之處在于,對(duì) null 和 undefined 值強(qiáng)制類型轉(zhuǎn)換可以生成字符串而不引發(fā)錯(cuò)誤:var s1 = String(null);/"null"var oNull = null;var s2 = oNull.toString();/會(huì)引發(fā)錯(cuò)誤toFixed() 方法toFixed() 方法返回的是具有指定位數(shù)小數(shù)的數(shù)字的字符串表示。例如:var oNumberObject = new Number(68);alert(oN

11、umberObject.toFixed(2); /輸出 "68.00"toFixed() 方法能表示具有 0 到 20 位小數(shù)的數(shù)字,超過這個(gè)范圍的值會(huì)引發(fā)錯(cuò)誤。toExponential() 方法與格式化數(shù)字相關(guān)的另一個(gè)方法是 toExponential(),它返回的是用科學(xué)計(jì)數(shù)法表示的數(shù)字的字符串形式。與 toFixed() 方法相似,toExponential() 方法也有一個(gè)參數(shù),指定要輸出的小數(shù)的位數(shù)。例如:var oNumberObject = new Number(68);alert(oNumberObject.toExponential(1); /輸出 &q

12、uot;6.8e+1"這段代碼的結(jié)果是 "6.8e+1",前面解釋過,它表示 6.8x101。問題是,如果不知道要用哪種形式(預(yù)定形式或指數(shù)形式)表示數(shù)字怎么辦?可以用 toPrecision() 方法。toPrecision() 方法toPrecision() 方法根據(jù)最有意義的形式來返回?cái)?shù)字的預(yù)定形式或指數(shù)形式。它有一個(gè)參數(shù),即用于表示數(shù)的數(shù)字總數(shù)(不包括指數(shù))。例如,var oNumberObject = new Number(68);alert(oNumberObject.toPrecision(1); /輸出 "7e+1"這段代碼的任

13、務(wù)是用一位數(shù)字表示數(shù)字 68,結(jié)果為 "7e+1",以另外的形式表示即 70。的確,toPrecision() 方法會(huì)對(duì)數(shù)進(jìn)行舍入。不過,如果用 2 位數(shù)字表示 68,就容易多了:var oNumberObject = new Number(68);alert(oNumberObject.toPrecision(2); /輸出 "68"當(dāng)然,輸出的是 "68",因?yàn)檫@正是該數(shù)的準(zhǔn)確表示。不過,如果指定的位數(shù)多于需要的位數(shù)又如何呢?var oNumberObject = new Number(68);alert(oNumberObjec

14、t.toPrecision(3); /輸出 "68.0"在這種情況下,toPrecision(3) 等價(jià)于 toFixed(1),輸出的是 "68.0"。toFixed()、toExponential() 和 toPrecision() 方法都會(huì)進(jìn)行舍入操作,以便用正確的小數(shù)位數(shù)正確地表示一個(gè)數(shù)。charAt() 方法charAt() 方法返回的是包含指定位置處的字符的字符串:var oStringObject = new String("hello world");alert(oStringObject.charAt(1);/輸出

15、"e"charCodeAt() 方法如果想得到的不是字符,而是字符代碼,那么可以調(diào)用 charCodeAt() 方法:var oStringObject = new String("hello world");alert(oStringObject.charCodeAt(1);/輸出 "101"這個(gè)例子輸出 "101",即小寫字母 "e" 的字符代碼。concat() 方法接下來是 concat() 方法,用于把一個(gè)或多個(gè)字符串連接到 String 對(duì)象的原始值上。該方法返回的是 String

16、原始值,保持原始的 String 對(duì)象不變:var oStringObject = new String("hello ");var sResult = oStringObject.concat("world");alert(sResult);/輸出 "hello world"alert(oStringObject);/輸出 "hello "在上面這段代碼中,調(diào)用 concat() 方法返回的是 "hello world",而 String 對(duì)象存放的仍然是 "hello "

17、。出于這種原因,較常見的是用加號(hào)(+)連接字符串,因?yàn)檫@種形式從邏輯上表明了真正的行為:var oStringObject = new String("hello ");var sResult = oStringObject + "world"alert(sResult);/輸出 "hello world"alert(oStringObject);/輸出 "hello "回的是 "hello world",而 String 對(duì)象存放的仍然是 "hello "。出于這種原因,較

18、常見的是用加號(hào)(+)連接字符串,因?yàn)檫@種形式從邏輯上表明了真正的行為:var oStringObject = new String("hello ");var sResult = oStringObject + "world"alert(sResult);/輸出 "hello world"alert(oStringObject);/輸出 "hello "indexOf() 和 lastIndexOf() 方法indexOf() 和 lastIndexOf() 方法返回的都是指定的子串在另一個(gè)字符串中的位置,如果沒有

19、找不到子串,則返回 -1。這兩個(gè)方法的不同之處在于,indexOf() 方法是從字符串的開頭(位置 0)開始檢索字符串,而 lastIndexOf() 方法則是從字符串的結(jié)尾開始檢索子串。例如:var oStringObject = new String("hello world!");alert(oStringObject.indexOf("o");輸出 "4"alert(oStringObject.lastIndexOf("o");輸出 "7"localeCompare() 方法下一個(gè)方法是

20、 localeCompare(),對(duì)字符串進(jìn)行排序。該方法有一個(gè)參數(shù) - 要進(jìn)行比較的字符串,返回的是下列三個(gè)值之一:如果 String 對(duì)象按照字母順序排在參數(shù)中的字符串之前,返回負(fù)數(shù)。如果 String 對(duì)象等于參數(shù)中的字符串,返回 0如果 String 對(duì)象按照字母順序排在參數(shù)中的字符串之后,返回正數(shù)。注釋:如果返回負(fù)數(shù),那么最常見的是 -1,不過真正返回的是由實(shí)現(xiàn)決定的。如果返回正數(shù),那么同樣的,最常見的是 1,不過真正返回的是由實(shí)現(xiàn)決定的。示例如下:var oStringObject = new String("yellow");alert(oStringObje

21、ct.localeCompare("brick");/輸出 "1"alert(oStringObject.localeCompare("yellow");/輸出 "0"alert(oStringObject.localeCompare("zoo");/輸出 "-1"在這段代碼中,字符串 "yellow" 與 3 個(gè)值進(jìn)行了對(duì)比,即 "brick"、"yellow" 和 "zoo"。由于按照字母順序

22、排列,"yellow" 位于 "brick" 之后,所以 localeCompare() 返回 1;"yellow" 等于 "yellow",所以 localeCompare() 返回 0;"zoo" 位于 "yellow" 之后,localeCompare() 返回 -1。再?gòu)?qiáng)調(diào)一次,由于返回的值是由實(shí)現(xiàn)決定的,所以最好以下面的方式調(diào)用 localeCompare() 方法:var oStringObject1 = new String("yellow"

23、);var oStringObject2 = new String("brick");var iResult = oStringObject1.localeCompare(oStringObject2);if(iResult < 0) alert(oStringObject1 + " comes before " + oStringObject2); else if (iResult > 0) alert(oStringObject1 + " comes after " + oStringObject2); else al

24、ert("The two strings are equal");采用這種結(jié)構(gòu),可以確保這段代碼在所有實(shí)現(xiàn)中都能正確運(yùn)行。localeCompare() 方法的獨(dú)特之處在于,實(shí)現(xiàn)所處的區(qū)域(locale,兼指國(guó)家/地區(qū)和語(yǔ)言)確切說明了這種方法運(yùn)行的方式。在美國(guó),英語(yǔ)是 ECMAScript 實(shí)現(xiàn)的標(biāo)準(zhǔn)語(yǔ)言,localeCompare() 是區(qū)分大小寫的,大寫字母在字母順序上排在小寫字母之后。不過,在其他區(qū)域,情況可能并非如此。slice() 和 substring()ECMAScript 提供了兩種方法從子串創(chuàng)建字符串值,即 slice() 和 substring()。這

25、兩種方法返回的都是要處理的字符串的子串,都接受一個(gè)或兩個(gè)參數(shù)。第一個(gè)參數(shù)是要獲取的子串的起始位置,第二個(gè)參數(shù)(如果使用的話)是要獲取子串終止前的位置(也就是說,獲取終止位置處的字符不包括在返回的值內(nèi))。如果省略第二個(gè)參數(shù),終止位就默認(rèn)為字符串的長(zhǎng)度。與 concat() 方法一樣,slice() 和 substring() 方法都不改變 String 對(duì)象自身的值。它們只返回原始的 String 值,保持 String 對(duì)象不變。var oStringObject = new String("hello world");alert(oStringObject.slice(&

26、quot;3");/輸出 "lo world"alert(oStringObject.substring("3");/輸出 "lo world"alert(oStringObject.slice("3", "7");/輸出 "lo w"alert(oStringObject.substring("3", "7");/輸出 "lo w"在這個(gè)例子中,slice() 和 substring() 的用法相同,返回

27、值也一樣。當(dāng)只有參數(shù) 3 時(shí),兩個(gè)方法返回的都是 "lo world",因?yàn)?"hello" 中的第二個(gè) "l" 位于位置 3 上。當(dāng)有兩個(gè)參數(shù) "3" 和 "7" 時(shí),兩個(gè)方法返回的值都是 "lo w"("world" 中的字母 "o" 位于位置 7 上,所以它不包括在結(jié)果中)。為什么有兩個(gè)功能完全相同的方法呢?事實(shí)上,這兩個(gè)方法并不完全相同,不過只在參數(shù)為負(fù)數(shù)時(shí),它們處理參數(shù)的方式才稍有不同。對(duì)于負(fù)數(shù)參數(shù),slice() 方法會(huì)用字

28、符串的長(zhǎng)度加上參數(shù),substring() 方法則將其作為 0 處理(也就是說將忽略它)。例如:var oStringObject = new String("hello world");alert(oStringObject.slice("-3");/輸出 "rld"alert(oStringObject.substring("-3");/輸出 "hello world"alert(oStringObject.slice("3, -4");/輸出 "lo w&qu

29、ot;alert(oStringObject.substring("3, -4");/輸出 "hel"這樣即可看出 slice() 和 substring() 方法的主要不同。當(dāng)只有參數(shù) -3 時(shí),slice() 返回 "rld",substring() 則返回 "hello world"。這是因?yàn)閷?duì)于字符串 "hello world",slice("-3") 將被轉(zhuǎn)換成 slice("8"),而 substring("-3") 將被轉(zhuǎn)

30、換成 substring("0")。同樣,使用參數(shù) 3 和 -4 時(shí),差別也很明顯。slice() 將被轉(zhuǎn)換成 slice(3, 7),與前面的例子相同,返回 "lo w"。而 substring() 方法則將兩個(gè)參數(shù)解釋為 substring(3, 0),實(shí)際上即 substring(0, 3),因?yàn)?substring() 總把較小的數(shù)字作為起始位,較大的數(shù)字作為終止位。因此,substring("3, -4") 返回的是 "hel"。這里的最后一行代碼用來說明如何使用這些方法。toLowerCase()、to

31、LocaleLowerCase()、toUpperCase() 和 toLocaleUpperCase()最后一套要討論的方法涉及大小寫轉(zhuǎn)換。有 4 種方法用于執(zhí)行大小寫轉(zhuǎn)換,即toLowerCase()toLocaleLowerCase()toUpperCase()toLocaleUpperCase()從名字上可以看出它們的用途,前兩種方法用于把字符串轉(zhuǎn)換成全小寫的,后兩種方法用于把字符串轉(zhuǎn)換成全大寫的。toLowerCase() 和 toUpperCase() 方法是原始的,是以 java.lang.String 中相同方法為原型實(shí)現(xiàn)的。toLocaleLowerCase() 和 toLocaleUpperCase() 方法是基于特定的區(qū)域?qū)崿F(xiàn)的(與 localeCompare() 方法相同)。在許多區(qū)域中,區(qū)域特定的方法都與通用的方法完全相同。不過,有幾種語(yǔ)言對(duì) Unicode 大小寫轉(zhuǎn)換應(yīng)用了特定的規(guī)則(例如土耳其語(yǔ)),因此必須使用區(qū)域特定的方法才能進(jìn)行正確的轉(zhuǎn)換。var

溫馨提示

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

評(píng)論

0/150

提交評(píng)論