1. 程式人生 > >Javascript高階程式設計學習筆記(6)—— 流程控制語句

Javascript高階程式設計學習筆記(6)—— 流程控制語句

話不多說,我們直接開始進入今天的主題

流程控制語句

首先什麼是流程控制語句呢?

顧名思義,就是控制流程的語句。

在JS中語句定義了ECMAScript中的主要語法,讓我們可以使用一系列的關鍵字來完成指定任務。

語句也是構成一門程式語言旳基礎,所以還是有必要記錄一下的。

雖然有些語句不常用,但存在即合理 emm

 

if語句

在大多數程式語言中if語句,是最常用的語句

語法如下:

if(條件){
  程式碼塊1    
}else{
  程式碼塊2  
}

當代碼塊只有一行語句時可以不用新增花括號。

但是在實際使用過程中,最好都加上花括號以保證程式碼的可讀性

其主要作用用於控制分支,以區分不同的情況。

在ES6中條件的小括號是一個單獨的作用域,作用域這裡不細說後面的文章會寫到

 

do-while 語句

這是一種後測試迴圈語句,即在迴圈體結束後才進行條件測試,與for、while不同的地方在於do-while中的程式碼至少會被執行一次

語法如下:

do{
    程式碼塊
}while(條件)

 

while 語句

跟do-while不同,while是一種前測試語句;

即在迴圈之前就會對條件表示式求值,如果不滿足條件就不會執行迴圈;

所以while迴圈中的程式碼不一定會執行(如果不滿足初始條件的話)

語法如下:

while(條件){
    程式碼塊
}

 

for 語句

for也是一種前測試迴圈語句,但是for具有迴圈前初始化變數、定義迴圈後執行程式碼的能力

語法如下:

for(初始化;條件表示式;迴圈執行程式碼){
    程式碼塊
}

需要注意的是,for迴圈只是將變數初始化等與迴圈有關的語句集中在了一起

所以while做不到的for也做不到

並且在for中初始化變數,和在迴圈外部初始化變數沒有什麼區別,因為JS中不存在塊級作用域(ES6以前)

除此而外,for中的三個表示式都是可選的,所以為for迴圈提供了極大的靈活性

 

for-in  語句

跟for不同,for-in是一種精準迭代語句,用於列舉物件屬性

語法如下:

for(var name in obj){
    程式碼塊
}

每一次迴圈name都會是一個屬性名

在迴圈體的程式碼塊中可以通過obj[name],的方式獲取物件中對應的值

需要注意:

1. ECMAScript物件的屬性沒有順序,所以遍歷的順序不可預知

2.如果迴圈的物件是null或者undefined在老版本中會丟擲錯誤

3.for-in迴圈只能遍歷出物件上可遍歷屬性

 

label 語句

label可以為程式碼新增標籤,以供break,continue跳轉到指定位置

語法如下:

標籤名:
程式碼塊


for(var i = 0;;i++){
    break 標籤名;  
}

多用於多層迴圈巢狀的情況,便於跳出迴圈到指定位置

 

break、continue語句

用於控制迴圈的精確執行

區別在於:

break會跳出整個迴圈

continue只會跳出當前這一次迴圈

這兩個語句都可以和label配合使用

 

with 語句

這個語句大家可能不太常見

其作用是將程式碼作用域設定到指定物件下

目的是為了簡化大量書寫同一物件

語法如下:

with(物件){
  程式碼塊  
}

程式碼塊中的程式碼的作用域就是設定的物件

感覺還是比較好用的,這樣就不用使用call來改變函式this指向了

with不常用當然是有原因的:

1.嚴格模式下不能使用

2.大量使用會導致效能下降,並且會給程式碼除錯造成困難

 

switch語句

用於多分支的情況,避免使用一串的if-else

語法如下:

switch(表示式){
    case 值1:
        程式碼塊1
        break;    
    case 值2:
        程式碼塊2
        break;
    case 值3:
        程式碼塊3
        break;
}

當表示式的值和case後的值相等時則會執行對應的程式碼塊

需要注意的是:

ECMA中的switch的特殊之處在於,case的值不僅限於數值

甚至可以是物件,也不一定是常量可以是變數,甚至是表示式都可以

 

除此而外,switch不會進行型別轉換,判斷時使用的是全等操作符

 

 

PS:明天出差,可能會拖更,對期待更新的小夥伴說一聲不好意思啦(雖然也沒什麼人期待更新 哭哭唧唧)