JavaScript1.5 函式(Functions)
使用參數物件(Using the arguments object)
函式的參數被保存在一個類陣列的(array-like)物件中。在函式內,您可以處理被傳給它的參數,如下所示:
arguments[i]
上述的 i 是參數的序號(ordinal number),開始於 0。所以傳遞到函式的第一個參數將會是 arguments[0]。參數的總數可以使用 arguments.length 來表示。
如果您預先不知道會有多少個參數會被傳遞到函式的話,使用 arguments 物件,您可以呼叫比它正式宣告時,還要更多參數的函式。這樣的方式通常是非常有用的。您可以使用 arguments.length 來確定傳遞給函式之參數的實際數目,然後處理使用 arguments 物件的每個參數。
例如,一個連接多個字串的函式。函式唯一的正式參數是指定分開字元項目所連接的字串。如下所定義的函式:
function myConcat(separator) {
var result = ""; // 初始化清單
// 參數的迴圈
for (var i = 1; i < arguments.length; i++) {
result += arguments[i] + separator;
}
return result;
}
您可以傳遞任何數量的參數到這個函式,並且它會連接每個參數進到字串"清單":
// 回傳 "red, orange, blue, "
myConcat(", ", "red", "orange", "blue");
// 回傳 "elephant; giraffe; lion; cheetah; "
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
// 回傳 "sage. basil. oregano. pepper. parsley. "
myConcat(". ", "sage"", "basil", "oregano", "pepper", "parsley");
內建的函式(Predefined Functions)
內建的函式其本身也是全域函式(Global Functions)。也就是說可以在您的腳本任何地方來引用與使用它。內建的全域函式它並不屬於文件物件模型(DOM,Document Object Model)的一部分,這些函式通常能把數據資料從一種資料類型轉化成另一種資料類型。
- eval() 與 toString()
- isFinite()
- isNaN()
- parseFloat() 與 parseInt()
- escape() 與 unescape()、decodeURI() 與 encodeURI()、decodeURIComponent() 與 encodeURIComponent()
eval() 與 toString()
| eval() | 兼容性:IE3+、NN2+、Moz1+、Safari1+ |
| toString() | 兼容性:IE4+、NN4+、Moz1+、Safari1+ |
eval(theStr)
theNum.toString(radix)
theStr:可以是運算元、運算式或敘述句的字串。
theNum:數值。
radix:2、8、10 或 16 進位。
這個 eval 函式是轉換 Script 程式碼中的字串與特定的物件無關,它也是一個上層函式,並且不需要連結任何物件就能使用,其函式的參數為一個字串。
假如這個字串是代表著一個表達式,eval 函式則轉換這個表達式。假如表示是一個或者更多個 Script 的敘述,則執行敘述。假如是一個算術運算式,則轉換成結果。主要是用來明確地表達是一個數值而不是一個文字。
toString() 則是讓我們可以指定您要的進位來轉換數值。
//範例一
var x = 1; //數值
var y = 38; //數值
var z = "99"; //字串
document.write(eval("x + y + 1")); //結果為 40
document.write(eval(z)); //結果為 99
//範例二 var theStr = "9 + 10"; //字串 document.write(theStr); //結果為 9 + 10 document.write(eval(theStr)); //結果為 19
//範例三 var myVar = 99; document.write(myVar.toString(16)); //結果為 16 進制的 63 document.write(myVar.toString(2)); //結果為 2 進制的 1100011
isFinite()
| isFinite() | 兼容性:IE4+、NN4+、Moz1+、Safari1+ |
isFinite(number)
number:欲檢查的字串、運算式或其它資料。
檢查資料是否可運算
isFinite() 這個內建的函式是用來轉換一個參數,來確定它是否為一個有效的數字;假如,是的話傳回 true,不是的話則傳回 false。可用來避免使用 eval() 轉換時出現錯誤的情形。
//範例一
document.write(isFinite(12345)); //結果為 true
document.write(isFinite(-6789)); //結果為 true
document.write(isFinite(1 + 2 + 3)); //結果為 true
document.write(isFinite("FF11")); //結果為 false
//範例二
myFlag = isFinite("9 + 10");
if(myFlag == false) {
document.write(eval("9 + 10")); //結果為19
}
isNaN()
| isNaN() | 兼容性:IE3+、NN2+、Moz1+、Safari1+ |
isNaN(checkVar)
checkVar:欲檢查的字串或變數名稱。
檢查資料是否為數字
isNaN() 是用來轉換一個參數,來確定它是否為「非數字」;假如是的話傳回 true,不是的話則傳回 false。
//範例一
document.write(isNaN(12345)); //結果為 false
document.write(isNaN(-6789)); //結果為 false
document.write(isNaN(1 + 2 + 3)); //結果為 false
document.write(isNaN("FF11")); //結果為 true
//範例二
myStr = "9 + 10";
myFlag = isNaN(myStr);
if(myFlag == true) {
document.write(myStr); //結果為 9 + 10
}
parseFloat() 與 parseInt()
| parseFloat() | 兼容性:IE3+、NN2+、Moz1+、Safari1+ |
| parseInt() | 兼容性:IE3+、NN2+、Moz1+、Safari1+ |
parseFloat(theStr)
parseInt(theStr)
parseInt(theStr,radix)
theStr:字串。radix:8、10或16進位。
將字串轉換成數字
parseFloat() 這個函式是用來將字串轉換成浮點數,如果字串第一個字元無法轉換成數字,則傳回 NaN。其字串可以包含 + 或 -、數字、小數點或次方。
parseInt() 這個函式是用來將字串轉換成整數,並且也可以將之轉換成 8、10 或 16 進位的數值。如果字串第一個字元無法轉換成特定進位的數字,則傳回 NaN。
//範例一
document.write(parseFloat("123.456")); //結果為 123.456
document.write(parseFloat("A12")); //結果為 NaN
document.write(parseFloat("12A")); //結果為 12
document.write(parseFloat("3 + 4 - 5")); //結果為 3
//範例二
document.write(parseInt("123.456")); //結果為 123
document.write(parseInt("A12")); //結果為 NaN
document.write(parseInt("14",8)); //結果為 12
document.write(parseInt("14",10)); //結果為 14
document.write(parseInt("14",16)); //結果為 20
escape() 與 unescape()、decodeURI() 與 encodeURI()、decodeURIComponent() 與 encodeURIComponent()
| escape() 與 unescape() | 兼容性:IE3+、NN2+、Moz1+、Safari1+ |
| decodeURI() 與 encodeURI() | 兼容性:IE5.5+、NN6+、Moz1+ |
| decodeURIComponent() 與 encodeURIComponent() | 兼容性:IE5.5+、NN6+、Moz1+ |
escape(theStr)
unescape(theStr)
theStr:字串。
文字轉換
escape() 與 unescape() 可以讓您對字串進行編碼與解碼。 escape() 會將英文字母或數字以外的特定符號(這七個除外
* @ + - _ . /
)或文字轉換成 16 進制的 ASCII 編碼。中文則會以 Unicode 轉換成「%u內碼」的格式。 unescape() 則是跟 escape() 相反。
decodeURI()、encodeURI() 與 decodeURIComponent()、encodeURIComponent() 這四個函式,也是類似於 escape() 與 unescape() ,這四個函式可進行文字與 URI(URL) 之間的轉換與還原。
decodeURI()、encodeURI() 與 decodeURIComponent()、encodeURIComponent() 所不同的是,前者不會去轉換
; / ? : @ & = + $ ,
後者則會。
//範例一
document.write(escape("天")); //big5 的結果為 %u5929
document.write(escape("天")); //utf-8 的結果為 %u61AD%uFFFD
document.write(escape(",#$")); //結果為 %2C%23%24
document.write(escape("*@+-_./")); //結果為 *@+-_./
//範例二
document.write(unescape("%u5929")); //結果為天
document.write(unescape("%2C%23%24")); //結果為,#$
//範例三
document.write(encodeURI("http://blog.beyes.tw/tag/日劇"));
//上述結果為 http://blog.beyes.tw/tag/%E6%97%A5%E5%8A%87
document.write(decodeURI("http://blog.beyes.tw/tag/%E6%97%A5%E5%8A%87"));
//上述結果為 http://blog.beyes.tw/tag/日劇