- 搞定J2EE核心技術與企業應用
- 常建功 王向華編著
- 2078字
- 2018-12-29 13:49:57
4.3 系統內部函數
因為JavaScript中的函數功能非常強大,為了方便開發人員使用,JavaScript提供了一些內部函數,就是指已經定義好的函數,開發人員可以直接使用這些函數。
4.3.1 使用eval返回字符串的值
如果開發人員熟悉Java的話,就會明白,如果只給出一個方法名的字符串,則只能用反射的機制來調用這個方法;同樣,在JavaScript中也存在這個問題,如果只給出一個方法名或者一個形式類似于方法調用的字符串,怎么來調用這個方法或語句呢?就是通過eval函數,該函數將通過參數傳入的一個包含JavaScript語句的字符串作為JavaScript源代碼執行,并返回該語句執行后的返回值;如果沒有值,則返回“undefined”。
下面演示eval函數的使用,示例代碼如下:
<HTML> <HEAD> <TITLE>使用eval函數的示例</TITLE> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- function HelloWorld() { for(i=0; i<arguments.length; i++) { alert(arguments[i]);//顯示出傳遞的參數 } } //--> </SCRIPT> </HEAD> <BODY> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- eval("HelloWorld('HelloWorld')"); //--> </SCRIPT> </BODY> </HTML>
上述代碼運行后的結果如圖4.2所示。

圖4.2 使用eval函數的示例
可以看到,使用eval函數來執行字符串“HelloWorld”,可以實現與直接調用函數HelloWorld一樣的功能。這里要注意在eval函數執行的字符串中單引號的使用,如果要執行的函數有參數,則要用單引號把參數括起來,如下所示:
eval("HelloWorld('HelloWorld')");
如果不把參數括起來,如下所示:
eval("HelloWorld(HelloWorld)");
則執行代碼時,顯示的內容是函數本身的內容,而不是函數執行后的結果,如圖4.3所示。

圖4.3 執行結果是函數本身的內容
4.3.2 使用escape進行字符編碼
在使用Java或JavaScript進行開發時,有一個問題必須要考慮,那就是中文的傳輸和存儲,如果不考慮編碼問題,那么存進數據庫的中文很可能就是亂碼;同樣,在通過JavaScript向Java提交中文數據時,也得考慮中文的編碼問題。JavaScript提供了escape函數來對除英文和數字外的字符進行十六進制編碼,通過escape函數的編碼后,所有的空格、標點及非ASCII字符都用%XX代替, XX為十六進制數,如果要轉換的字符值超過255,則用%uXXXX表示,但數字并不轉換。
下面演示escape函數的使用,示例代碼如下:
<HTML> <HEAD> <TITLE>使用escape函數的示例</TITLE> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- var str=escape("歡迎使用escape函數 ;256"); document.write(str); //--> </SCRIPT> </HEAD> <BODY> </BODY> </HTML>
上述代碼運行后的結果如圖4.4所示。

圖4.4 使用escape函數的示例
可以看到所有的中文、空格和標點都進行了轉換,比如“歡”轉換為“%u6B22”,“迎”轉換為“%u8FCE”,空格轉換為“%20”,這樣在傳輸中文字符時就不會出現亂碼了。
4.3.3 使用unescape進行字符解碼
既然可以對中文字符進行編碼,自然也能夠對編碼過的中文字符進行解碼,JavaScript提供了unescape函數來實現此功能。
下面演示unescape函數的使用,示例代碼如下:
<HTML> <HEAD> <TITLE>使用unescape函數的示例</TITLE> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- var str=unescape(escape("歡迎使用unescape函數 ;256")); document.write(str); //--> </SCRIPT> </HEAD> <BODY> </BODY> </HTML>
上述代碼運行后的結果如圖4.5所示。

圖4.5 使用unescape函數的示例
可以看到,經過escape函數編碼的字符,經過unescape函數解碼后,即可恢復原貌。
4.3.4 使用parseInt和parseFloat進行數值轉換
在JavaScript中,不管是定義字符串類型還是數值類型,雖然都是使用var,但其實還是有區別的,這就使得在開發程序過程中,可能要進行字符串和數值之間的轉換,JavaScript提供了parseInt和parseFloat函數,來將字符轉換成數值。parseInt函數用于將以字符串開頭的整數分解出來,若字符串不是以數字開頭,則返回NaN;parseFloat函數用于將以字符串開頭的整數或浮點數分解出來,若字符串不是以數字開頭,則返回NaN。
注意:在JavaScript中,parseInt不能解析浮點數,而parseFloat可以解析浮點數。
下面演示parseInt和parseFloat函數的使用,示例代碼如下:
<HTML> <HEAD> <TITLE>使用parseInt和parseFloat函數的示例</TITLE> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- document.write("parseInt('123')="+parseInt("123")+"<BR>"); document.write("parseInt('123.567')="+parseInt("123.567")+"<BR>"); document.write("parseInt('123abc')="+parseInt("123abc")+"<BR>"); document.write("parseInt('123.5e2')="+parseInt("123.5e2")+"<BR>"); document.write("parseInt('0x12')="+parseInt("0x12")+"<BR>"); document.write("parseInt('123',16)="+parseInt("123",16)+"<BR>"); document.write("parseInt('abc')="+parseInt("abc")+"<BR>"); document.write("parseInt(true)="+parseInt(true)); document.write("<BR>"); document.write("parseFloat('123')="+parseFloat("123")+"<BR>"); document.write("parseFloat('123.567')="+parseFloat("123.567")+"<BR>"); document.write("parseFloat('123abc')="+parseFloat("123abc")+"<BR>"); document.write("parseFloat('123.5e2')="+parseFloat("123.5e2")+"<BR>"); document.write("parseFloat('0x12')="+parseFloat("0x12")+"<BR>"); document.write("parseFloat('123',16)="+parseFloat("123",16)+"<BR>"); document.write("parseFloat('abc')="+parseFloat("abc")+"<BR>"); document.write("parseFloat(true)="+parseFloat(true)); //--> </SCRIPT> </HEAD> <BODY> </BODY> </HTML>
上述代碼運行后的結果如圖4.6所示。

圖4.6 使用parseInt和parseFloat函數的示例
4.3.5 使用typeof判斷對象類型
有時候開發人員可能想知道一個字符串是什么類型的,JavaScript提供了typeof函數來返回對象類型,它的返回值有6種可能:number、string、boolean、object、function和undefined。
下面演示typeof函數的使用,示例代碼如下:
<HTML> <HEAD> <TITLE>使用typeof函數的示例</TITLE> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- function HelloWorld() { for(i=0; i<arguments.length; i++) { alert(arguments[i]);//顯示出傳遞的參數 } } //--> </SCRIPT> </HEAD> <BODY> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- eval("alert(typeof(HelloWorld))"); //--> </SCRIPT> </BODY> </HTML>
上述代碼運行后的結果如圖4.7所示。

圖4.7 使用typeof函數的示例
4.3.6 使用isFinite判斷一個變量是否有界
如果要在JavaScript中進行數值運算,就可能會遇到要判斷一個變量的值的邊界情況, JavaScript提供了isFinite函數用來判斷一個變量是否有界,如果有界則返回true,否則返回false。
下面演示isFinite函數的使用,示例代碼如下:
<HTML> <HEAD> <TITLE>使用isFinite函數的示例</TITLE> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- document.write("isFinite(1234)="+isFinite(1234)+"<BR>"); document.write("isFinite(1.234)="+isFinite(1.234)+"<BR>"); document.write("isFinite('aaa')="+isFinite('aaa')+"<BR>"); document.write("isFinite(true)="+isFinite(true)+"<BR>"); document.write("isFinite(null)="+isFinite(null)+"<BR>"); document.write("isFinite(1/0)="+isFinite(1/0)); //--> </SCRIPT> </HEAD> <BODY> </BODY> </HTML>
上述代碼運行后的結果如圖4.8所示。

圖4.8 使用isFinite函數的示例
4.3.7 使用isNaN判斷一個變量是否是數值
在JavaScript中進行數值運算,還可能會碰到一種情況,那就是判斷要計算的變量是否為數值,JavaScript提供了isNaN函數用來判斷一個變量是否是數值,如果不是數值則返回true,否則返回false。
下面演示isNaN函數的使用,示例代碼如下:
<HTML> <HEAD> <TITLE>使用isNaN函數的示例</TITLE> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- document.write("isNaN(1234)="+isNaN(1234)+"<BR>"); document.write("isNaN(1.234)="+isNaN(1.234)+"<BR>"); document.write("isNaN('aaa')="+isNaN('aaa')+"<BR>"); document.write("isNaN(true)="+isNaN(true)+"<BR>"); document.write("isNaN(null)="+isNaN(null)+"<BR>"); document.write("isNaN(1/0)="+isNaN(1/0)); //--> </SCRIPT> </HEAD> <BODY> </BODY> </HTML>
上述代碼運行后的結果如圖4.9所示。

圖4.9 使用isNaN函數的示例
注意:這里是將true看成1來進行處理的。