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:明天出差,可能會拖更,對期待更新的小夥伴說一聲不好意思啦(雖然也沒什麽人期待更新 哭哭唧唧)
Javascript高級編程學習筆記(6)—— 流程控制語句