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

Javascript高級編程學習筆記(6)—— 流程控制語句