### 語句
* if語句
* do-while語句
* while語句
* for語句
* for-of語句
* label語句
* break和continue語句
* with語句
* switch語句
* * * * *
#### if語句
> if語句是編程中最常用的語句,下面就是一個if語句:
~~~
if( m=0 ){
console.log("語句1 ,如果m=0返回true,這里將被輸出!")
}else{
console.log("語句2 ,如果m=0返回false,這里將被輸出!")
}
~~~
> 其中 m=0 就是if語句中的條件,這個條件可以時任何表達式,而且表達式返回的結果不一定要求是boolean值,因為ECMAScript會自動調用Boolean()方法將這個表達式的結果轉換為boolean值。如上所示,如果表達式返回值為true,語句1將被執行,如果表達式返回值為false,那么將執行語句2。
> 但在很多時候,我們需要滿足多個條件,那可以通過在else后面再加上if語句,代碼如下:
~~~
if( m=0 ){
console.log("語句1 ,如果m=0返回true,這里將被輸出!")
}else if( m=1 ){
console.log("語句2 ,如果m=1返回true,這里將被輸出!")
}else{
console.log("語句3 ,如果m=0和m=1都返回false,這里將被輸出!")
}
~~~
#### do-while語句
> do-while語句是一種測試循環語句,即只有在循環體中的代碼執行后,才會測試出口條件。可理解為:在條件表達式求值之前,循環體內的代碼至少執行一次,代碼如下:
~~~
let i = 0
do {
i++
}while(i<10);
~~~
> 上面例子中,只要變量i的值小于10,循環就會一只執行下去
#### while語句
> while語句屬于前測試循環語句,與上面的do-while不同的是:在執行循環體內的代碼之前就會對條件進行求值,然后再執行一次循環體的代碼后,再次判斷條件語句,直到條件語句被滿足,代碼如下:
~~~
let i =0
while(i<10){
i++
}
//當i大于等于10的時候循環結束
~~~
#### for語句
> for語句是一種前測試循環語句,但它具有執行循環之前初始化變量和定義循環后要執行的代碼的能力,案例如下:
~~~
let c = 10
for(let i =0 ; i<c; i++){
console.log(i) // 依次輸出 1,2,3,4,5,6,7,8,9
}
~~~
#### for-of語句
>for...of循環可以使用的范圍包括數組、Set 和 Map 結構(進階章節會講到)、某些類似數組的對象,以及字符串。案例如下:
~~~
let iterable = [10, 20, 30];
for (let value of iterable) {
console.log(value) // 依次輸出: 10 ,20 ,30
}
~~~
> 上面的案例展示的是數組,同樣,你可以把iterable替換為字符串或者對象來使用for...of來解析。
#### label語句
> 使用label語句可以在代碼中添加標簽,以供未來使用,案例如下:
~~~
hello : function(){
console.log("hello world")
}
~~~
> javascript解釋器在遇到label語句時并不會試著去執行它,等到你調用該label語句時才會被執行。
#### break和continue語句
> break和continue語句用于在循環中精準的控制代碼的執行,其中,break語句會立即退出循環,強制執行后面的語句,而continue雖然也是立即退出循環,但是推出循環后會從循環頂部繼續執行。案例如下:
~~~
let num =0
for(i=1;i<10;i++){
if(i%5=0){
break
}
num++
}
console.log(num) // 4
let ber = 0
for(i=1;i<10;i++){
if(i%5=0){
continue
}
ber++
}
console.log(ber) // 8
~~~
#### with語句
> with語句的作用是將代碼的作用域設置到一個特定的對象中,同時with語句也可以簡化代碼操作。案例如下:
~~~
let q = a.q
let w = a.w
let e = a.e
let r = a.r
//上面的代碼都包含了localtion對象,使用with語句可以簡化為下面的代碼:
with(a){
let q = q
let w = w
let e = e
let r = r
}
//不過es6中新增了一種新的語法“解構”,可以更方便的分解操作對象/數組/字符串,在javascript進階一章中有講到
~~~
#### switch語句
> switch語句與if語句對關系最為密切,而且也是在其他語言中普遍流行的一種控制語句,案例如下:
~~~
//在if判斷語句中如果存在N多個判斷條件,那么你的代碼會像下面這樣:
if( i =1){
console.log(1)
}else if (i=2){
console.log(2)
}else if (i=3){
console.log(3)
}else if (i=4){
console.log(4)
}else if (i=5){
console.log(5)
}else{
console.log(6)
}
~~~
> 很明確的告訴你,這樣做不僅代碼難看,而且會影響javascript解釋器執行效率,因為javascript解釋器會去判斷每一個條件,但是用switch()就可以解決這種問題,因為switch()語句會直接去尋找符合條件的case,然后執行這個case,不會像if語句那么呆板的去一個一個判斷,如果找不到符合條件的case,那么將直接執行default,如下:
~~~
switch(i){
case 1:
console.log(1)
break
case 2:
console.log(2)
break
case 3:
console.log(3)
break
case 4:
console.log(4)
break
case 5:
console.log(5)
break
default:
console.log(1)
}
~~~
> 如上所示,switch()語句中每一個case的含義是:如果表達式等于這個值,則執行執行后面的語句,執行完成后有一個break關鍵字跳出switch語句,如果省略break,接回導致執行完當前case后繼續執行下一個case,直到遇見break或者所有代碼執行完,最后的default關鍵字則用于表達式不匹配前面任何一種情形時執行,相當于一個else語句。
> 溫馨提示:switch的判斷表達式和case的匹配表達式可以是任何類型的值,甚至是null或者undefined,同時建議使用if語句時判斷條件最多匹配兩個,超過兩個建議用使用switch