JavaScript1.5 敘述(Statements)

敘述(Statements)

JS 可以支援精簡的語句(或稱敘述)組或者是非常複雜的語句組,而這些語句組(敘述)是用來讓 JS 完成我們所指定的任務。

先前所提及的任何表達式(expressions),它也是一種「簡單」的敘述(statements),而「完整」的敘述,就如同一段完整的命令或者是句子來完成 JS 應有的「行為」。

敘述語句是由關鍵字與其相對應的語法所構築而成的,在 JS 程式碼中可以使用分號「;」字元來結束該敘述語句。我們也可以說一個單獨的語句可以寫在多列上,如果有用分號隔開語句和語句的話,複數語句也可同時出現於單列上。

區塊敘述(Block Statements)

區塊敘述或稱敘述區塊(statement block)是被使用來使敘述成為一個集合群,該區塊是由一對大括號 {} 所劃分:

{
	statement1
	statement2
	.
	.
	.
	statementN
}

敘述區塊常搭配流程控制敘述(如 if、for、while),例如:

while (x < 10) {
	x++;
}

上述範例中,{x++;} 就是一個區塊敘述。

JS 並沒有區塊的範圍。變數引入的區塊只限於包含函式或 Script,並且其設定的作用在區塊之外仍然存在。換句話說,區塊敘述並不會引入一個範圍。雖然「獨立」的區塊是合法的語法,但是如果您認為它們執行任何動作會像 C 或 Java 這類的區塊,您是不會想使用獨立區塊中的 JS,因為它們並非如您所想的那樣做。

條件敘述(Conditional Statements)

條件敘述是一套執行特定條件為真時的命令。JS 有兩種條件敘述:

  • if 與 if…else
  • switch…case…default
if 與 if…else 兼容性:IE3+、NN2+、Moz1+、Safari1+
if(condition) {
	statementsIfTrue
}

單一選擇結構

假如 if 的條件式(condition)為真(true)則執行大括號 {} 內的語句;假如 if 的條件式(condition)為假(false)則什麼都不執行。

if(condition) {
	statementsIfTrue
} else {
	statementsIfFalse
}

雙向選擇結構

假如 if 的條件式為真(true)則執行 if 區塊內的語句;假如 if 的條件式為假(false)則執行 else 區塊內的語句。

巢狀選擇結構

底下列舉了二層與三層式巢狀結構,每個顏色區塊代表了一個選擇性結構,它可以是單一選擇結構或者是雙向選擇結構。

for(a = 1;a < 10;a++) {
	if(a >= 4) {
		document.write("超過 3 了","<br />");
	} else {
		document.write(a,"<br />");
	}
}
switch…case…default 兼容性:IE4+、NN4+、Moz1+、Safari1+
switch(expression) {
	case label : statement;break;
	case label : statement;break;
	...
	default : statement;
}

用在想要根據變數的值來分歧,然後去執行程式或命令。當變數的值與每項 case 值不相同的時候,則會執行 default 所指定的命令。

case 最後面要加上 break 跳出區塊,否則會繼續執行下面的 case。

for(a = 1;a < 10;a++) {
	if(a >= 6) {
		document.write("超過 5 了","<br />");
	} else {
		switch(a) {
			case 1:document.write("這是 1","<br />");break;
			case 2:document.write("這是 2","<br />");break;
			case 3:document.write("這是 3","<br />");break;
			default:document.write("sorry","<br />");
		}
	}
}

迴圈敘述(Loop Statements)

迴圈敘述是一套重複執行的命令,直到符合特定條件或情況才會停止。JS 有下面幾種迴圈敘述:

  • for
  • do…while
  • while
  • label

迴圈控制:

  • break
  • continue
for 兼容性:IE3+、NN2+、Moz1+、Safari1+
for([initialExp]; [condition]; [incrementExp]) {
	statements;
}

initialExp:初始值
condition:結束值/條件
incrementExp:遞增值

for 敘述將變數初始化、條件測試與更新三者合而為一個明確的迴圈語法。

指定次數重複執行,在條件不成立時,則完全不執行。

沒有設定條件的 for (;;),會行成無限迴圈。

for(b = 20;b < 25;b++) {
	document.write(b,"<br />");
}
do…while 兼容性:IE4+、NN4+、Moz1+、Safari1+
do {
	statements;
} while(condition)

在條件成立時重複執行,在條件不成立時,至少已經執行 {} 內的動作一次。也就是說先會執行程式區塊一次,然後再做條件的判斷。

var a = 10;
do {
	document.write(a,"<br />");
	a++;
} while(a < 15)
while 兼容性:IE3+、NN2+、Moz1+、Safari1+
while(condition) {
	statements;
}

在條件成立時重複執行,在條件不成立時,則完全不執行。

var n = 0;
var x = 0;
while(n < 3) {
	n++;
	x = x + n;
	document.write(x + "<br />");
}
label 兼容性:IE4+、NN4+、Moz1+、Safari1+
label:
statements;

label:自訂的標籤名稱

label 提供敘述語句一個可識別的名稱,讓您在程式別處來引用它。例如,您可以使用一個 label 來識別一個迴圈敘述,然後使用 break 或 continue 敘述來控制迴圈是否繼續或中斷。

label 它本身並非是迴圈敘述,不過它常被使用在迴圈敘述中。標籤名,以任何英文字母開頭,當中是以英文字母、底線、數字所組成,並在最後面加上冒號「:」。

for(c = 1;c < 4;c++) {
	lab:
	for(d = 1;d < 4;d++) {
		if(c == 2) break lab;
			document.write(c + d,"<br />");
	}
}
break 兼容性:IE4+、NN4+、Moz1+、Safari1+
break label

(label 名可省略)

使用 break 敘述來終止(或跳出)迴圈、switch 或 label 敘述。

當您使用 break 語句並未使用 label 語句時,它終止從 while 、 do…while 、 for 或 switch 的開始到 break 內的語句組,然後跳出迴圈(※立刻跳出)。當您使用 break 語句使用 label 語句時,它終止被指定 label 的語句。

for(b = 0;b < 6;b++) {
	if(b > 4) break;
		document.write(b,"<br />");
}
continue 兼容性:IE4+、NN4+、Moz1+、Safari1+
continue label

(label 名可省略)

使用 continue 敘述來繼續(回到迴圈前方)迴圈、switch 或 label 敘述。

當您使用 continue 語句並未使用 label 語句時,它回到 while 、 do…while 或 for 的開始然後繼續迴圈(※跳出目前的循環,然後重新開始一個新的循環)。當您使用 continue 語句使用 label 語句時,它繼續回到被指定 label 的語句。

for(a = 0;a < 6;a++) {
	if(a < 4) continue;
		document.write(a,"<br />");
}

物件操作敘述(Object Manipulation Statements)

JavaScript 使用 for…in 與 with 來操作物件。

  • for…in
  • with
for…in 兼容性:IE3+、NN2+、Moz1+、Safari1+
for(variable in object) {
	statements;
}

for…in 敘述重複一個指定的變數在這個物件的所有屬性上。為每一個獨特的屬性, JavaScript 執行它所指定的敘述。也就是說利用物件的屬性個數來指定次數重複執行。它可以提取瀏覽器中「當前」物件的屬性名稱與屬性值, object 不是物件的字串名而是物件本身的引用。如果提供一個物件名稱作為非引用字串,例如 window 就會傳送一個物件的引用。

for(x in window) {
	document.write(x, "=" ,window[x],"<br />");
}
with 兼容性:IE3+、NN2+、Moz1+、Safari1+
with(object) {
	statements;
}

with 敘述用來建立一個省略物件名稱的一組語句。 with 語句的開始是告訴 JavaScript 現在語句中所使用的物件是哪一個,這樣該語句組中假如有使用到相同的物件名稱則可以不必「完全正式的引用」。

with(document) {
	write("我省略了document");
}

例外處理敘述(Exception Handling Statements)

發生不可預期的狀況或錯誤時所要進行的處理。JavaScript 有三種例外處理敘述:

  • try…catch
  • finally
  • throw
try…catch 兼容性:IE5+、NN6+、Moz1+、Safari1+
try {
	statements;
} catch(catchID) {
		statements;
}

在 try 裡定義可能會出現例外的命令,並在 catch 裡進行例外發生時的處理動作。

//拼字與函式未定義錯誤
try {
	windows()
} catch(err) { alert("發生"+err+"錯誤"); }
finally 兼容性:IE5+、NN6+、Moz1+、Safari1+
finally {
	statements;
}

無論例外有沒有發生,都一定會執行的。

try {
	windows()
} catch(err) { alert("發生"+err+"錯誤"); }
finally { document.write("繼續…"); }
throw 兼容性:IE5+、NN6+、Moz1+、Safari1+
throw expression

可強制產生例外,然後將參數的值傳給 catch。

for(a = 1;a < 10;a++) {
	try {
		if(a <= 5) throw "yes";
		if(a > 5) throw "no";
	} catch(err) {
		if(err == "yes") {
			document.write(a," is yes","<br />");
		} if(err == "no") {
			document.write(a," is no","<br />");
		  }
	  }
}