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()

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/日劇
頁數: 1 2

文章分類

文章標籤