JavaScript1.5 敘述(Statements)
敘述(Statements)
JS 可以支援精簡的語句(或稱敘述)組或者是非常複雜的語句組,而這些語句組(敘述)是用來讓 JS 完成我們所指定的任務。
先前所提及的任何表達式(expressions),它也是一種「簡單」的敘述(statements),而「完整」的敘述,就如同一段完整的命令或者是句子來完成 JS 應有的「行為」。
敘述語句是由關鍵字與其相對應的語法所構築而成的,在 JS 程式碼中可以使用分號「;」字元來結束該敘述語句。我們也可以說一個單獨的語句可以寫在多列上,如果有用分號隔開語句和語句的話,複數語句也可同時出現於單列上。
- 區塊敘述(Block Statements)
- 條件敘述(Conditional Statements)
- 迴圈敘述(Loop Statements)
- 物件操作敘述(Object Manipulation Statements)
- 例外處理敘述(Exception Handling Statements)
區塊敘述(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 />");
}
}
}




