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