1 代碼塊
簡(jiǎn)介:
程序是由一條一條語(yǔ)句構(gòu)成的归榕,語(yǔ)句是按照自上向下的順序一條一條執(zhí)行的猬错,在JS中可以使用{}來為語(yǔ)句進(jìn)行分組
同一個(gè){}中的語(yǔ)句我們稱為是一組語(yǔ)句腌零,他們要么都執(zhí)行,要么都不執(zhí)行
使用:
JS中的代碼塊诊胞,只具有分組的作用,沒有其他的用途
代碼塊里面的內(nèi)容锹杈,在外部是完全可見的
2 流程控制語(yǔ)句
基本概念:
默認(rèn)情況下撵孤,程序的運(yùn)行流程是這樣的:運(yùn)行程序后,系統(tǒng)會(huì)按書寫從上至下順序執(zhí)行程序中的每一行代碼竭望,但是這樣并不能滿足我們所有的開發(fā)需求
實(shí)際開發(fā)中邪码,我們需要根據(jù)不同的條件執(zhí)行不同的代碼或者重復(fù)執(zhí)行某一段代碼
為了方便我們控制程序的運(yùn)行流程,JavaScript提供3種流程結(jié)構(gòu)咬清,不同的流程結(jié)構(gòu)可以實(shí)現(xiàn)不同的運(yùn)行流程。分別是順序旧烧、選擇喻圃、循環(huán)三種基本控制結(jié)構(gòu)構(gòu)造
1)順序結(jié)構(gòu):默認(rèn)的流程結(jié)構(gòu)。按照書寫順序從上至下執(zhí)行每一條語(yǔ)句
2)選擇結(jié)構(gòu):對(duì)給定的條件進(jìn)行判斷粪滤,再根據(jù)判斷結(jié)果來決定執(zhí)行哪一段代碼
3)循環(huán)結(jié)構(gòu):在給定條件成立的情況下斧拍,反復(fù)執(zhí)行某一段代碼
2.1 if
定義:
如果表達(dá)式為真,執(zhí)行語(yǔ)句塊1杖小,否則執(zhí)行語(yǔ)句塊2
格式:
if(條件表達(dá)式) {
語(yǔ)句塊1
}
else {
語(yǔ)句塊2
}
如果條件表達(dá)式1為真肆汹,則執(zhí)行語(yǔ)句塊1,否則判斷條件表達(dá)式2予权,如果為真執(zhí)行語(yǔ)句塊2昂勉,否則再判斷條件表達(dá)式3,如果真執(zhí)行語(yǔ)句塊3扫腺,當(dāng)表達(dá)式123都不滿足岗照,會(huì)執(zhí)行最后一個(gè)else語(yǔ)句
var age=35;
if(age>40) {
console.log('老年人');
}else if(age>20){
console.log('中年人')
}else if(age>12){
console.log('成年人');
}else {
console.log('未成年人');
}
注意點(diǎn):
1)如果只有一條語(yǔ)句時(shí),if后面的大括號(hào)可以省略(不建議省略)
2)分號(hào)“笆环;”也是一條語(yǔ)句攒至,空語(yǔ)句
if(1>0); //if已經(jīng)結(jié)束,后面的不再屬于if
{
語(yǔ)句塊1
}
3)if else是一個(gè)整體躁劣,else匹配if的時(shí)候匹配離他最近的一個(gè)if
4)對(duì)于非Boolean類型的值迫吐,會(huì)先轉(zhuǎn)換為Boolean類型后再判斷
5)判斷變量與字面量的問題
但凡遇到比較一個(gè)變量等于或者不等于某一個(gè)字面量的時(shí)候,把字面量寫在前面
本來是先判斷變量a儲(chǔ)存的值是否等于0账忘,
但是如果不小心寫成了a=0
志膀,代表把0儲(chǔ)存到a中(賦值)
為了避免這種問題熙宇,判斷是否相等時(shí)把字面量寫在前面
因?yàn)榈忍?hào)左邊只能是變量,所以如果少些一個(gè)等號(hào)會(huì)報(bào)錯(cuò)
6)if語(yǔ)句可以嵌套使用
var num=20;
if(num>=10 {
if(num<=30) {
console.log('滿足條件溉浙!')烫止;
}
}
2.2 Switch
Switch和if一樣都屬于選擇結(jié)構(gòu),都會(huì)對(duì)給定的條件進(jìn)行判斷戳稽,再根據(jù)判斷結(jié)果來決定執(zhí)行哪一段代碼
基本格式:
switch(條件表達(dá)式) {
case 表達(dá)式:
語(yǔ)句1馆蠕;
break;
case 表達(dá)式:
語(yǔ)句2广鳍;
break荆几;
case 表達(dá)式n:
語(yǔ)句n;
break赊时;
default:
語(yǔ)句n+1;
break吨铸;
}
含義:
1)計(jì)算條件表達(dá)式的值。并逐個(gè)與case后面表達(dá)式的結(jié)果值比較
2)當(dāng)條件表達(dá)式的值與某個(gè)表達(dá)式的值全等時(shí)祖秒,執(zhí)行其后的語(yǔ)句诞吱,并且不會(huì)再與其他 case進(jìn)行比較
3)如果條件表達(dá)式的值與所有的case后的表達(dá)式均不相同時(shí),則執(zhí)行default后的語(yǔ)句
示例:
var num=3;
switch(num) {
case 1 :
console.log('壹');
break;
case 2 :
console.log('貳');
break;
case 3 :
console.log('叁'); //輸出“叁”
break;
default:
console.log('其他');
break;
}
注意事項(xiàng):
1)case全等與問題:
JavaScript中case
判斷是否相等時(shí)是全等于(===)竭缝,而不是等于(==)房维,也就是說即會(huì)判斷類型是否相等又會(huì)判斷值是否相等
case
后可以是字面量也可以是變量
2)表達(dá)式判斷問題:判斷時(shí)會(huì)先計(jì)算表達(dá)式的值,再判斷
3)case的穿透問題:switch
里面的case
只要匹配一次其他的都會(huì)失效抬纸,包括default
在case
語(yǔ)句最后增加的break
語(yǔ)句咙俩,使每一次執(zhí)行之后均可跳出switch
語(yǔ)句,從而避免輸出不應(yīng)有的結(jié)果
4)default
的位置問題:
default
可以省略
default
語(yǔ)句可以寫在switch
語(yǔ)句中的任意位置
案例:
//根據(jù)輸入成績(jī)判斷等級(jí)
var num=window.prompt('請(qǐng)輸入您的分?jǐn)?shù):');
switch(num= parseInt(num/10)) {
case 10 :
case 9 :
console.log('A');
break;
case 8 :
console.log('B');
break;
case 7 :
console.log('C');
break;
case 6 :
console.log('D');
break;
default :
console.log('E');
break;
}
if
語(yǔ)句和switch
語(yǔ)句的選擇:
1)分支比較多且無窮盡時(shí)最好用if
湿故,其他情況可以視情況而定
2)如果數(shù)據(jù)量不是很大阿趁,并且數(shù)據(jù)是固定的可以用switch
3)理論上switch
的效率比if高
4)switch
的弊端
判斷用戶輸入的數(shù)是否大于100
if
很容易,switch
很麻煩