為什么使用流程控制绒北?
我們?cè)趯慾s代碼時(shí),一行一行的寫艰管,系統(tǒng)也會(huì)一行一行的進(jìn)行執(zhí)行,但很多時(shí)候我們希望系統(tǒng)按照我們的意愿進(jìn)行執(zhí)行顶伞,在特定的時(shí)候饵撑,有些代碼需要跳過(guò)剑梳,或者有些執(zhí)行要重復(fù)執(zhí)行多次,這時(shí)我們就要使用流程控制語(yǔ)句滑潘。
在js中流程控制語(yǔ)句分為三類:
順序結(jié)構(gòu)(從下往下)
分支結(jié)構(gòu)(if,switch)
循環(huán)結(jié)構(gòu)(for,while)
順序結(jié)構(gòu)
順序結(jié)構(gòu)是程序中最基本的流程垢乙,正常的一段代碼,包含在一對(duì)大括號(hào)中语卤,表示一個(gè)代碼塊追逮,程序會(huì)按照代碼的先后順序,依次執(zhí)行粹舵。
{
var name="小明";
var money=100;
console.log(name + "看看了兜里钮孵,只剩下" +money+ "元.");
}
這里我們寫了三行代碼,定義了一個(gè)名字叫小明的人眼滤,兜里只有100元錢巴席,再運(yùn)行后系統(tǒng)會(huì)一條一條進(jìn)行執(zhí)行:
首先系統(tǒng)會(huì)創(chuàng)建一個(gè)name的string型變量,然后再創(chuàng)建一個(gè)money的number型變量诅需,最后在控制臺(tái)辦輸出一段文字漾唉。
分支結(jié)構(gòu)(if,switch)
在js中分支結(jié)構(gòu)有兩個(gè)語(yǔ)句可以選擇使用,分別是if語(yǔ)句和switch語(yǔ)句堰塌。
單一條件的if語(yǔ)句
具體的語(yǔ)法形式如下:
if(布爾表達(dá)式)
{
語(yǔ)句塊;
}
比如小明看到餐廳里有一只烤乳豬赵刑,價(jià)格為300元,可是看了看兜里的錢發(fā)現(xiàn)錢不夠场刑,我們?cè)诔绦蚶锞涂梢赃@樣寫:
var name = "小明";
var money = 100;
var pig = 300;
if (money > pig) {
money -= pig;
console.log(name + "買了一只豬");
console.log(name + "看看了兜里般此,只剩下" + money + "元.");
}
當(dāng)系統(tǒng)執(zhí)行到if語(yǔ)句時(shí),會(huì)先對(duì)(money < pig)
進(jìn)行運(yùn)行,如果結(jié)果為真時(shí)铐懊,會(huì)運(yùn)行{...}
內(nèi)的代碼屎勘。但這時(shí)小明的錢不夠買一只豬,程序判斷為假居扒,所以{...}
內(nèi)的代碼會(huì)被程序跳過(guò)概漱。
但這時(shí)你會(huì)問(wèn)小明錢不夠會(huì)怎么辦呢?
二選一的if語(yǔ)句
我們可以通過(guò)在if(如果...)語(yǔ)句后面緊跟一個(gè)else(否則...)來(lái)實(shí)現(xiàn)喜喂。
var name = "小明";
var money = 100;
var pig = 300;
if (money > pig){
money -= pig;
console.log(name + "買了一只豬");
console.log(name + "看看了兜里瓤摧,只剩下" + money + "元.");
}
else {
console.log(name + "看看了兜里,只剩下" + money + "元.");
console.log(name + "嘆了口氣玉吁,轉(zhuǎn)身離開.");
}
多選一的if語(yǔ)句
這時(shí)小明發(fā)現(xiàn)餐廳里還有雞照弥,他決定試一試,我們繼續(xù)用if語(yǔ)句來(lái)實(shí)現(xiàn)进副。
var name = "小明";
var money = 100;
var pig = 300;
var chicken=200;
var fish=100;
if (money > pig){
money -= pig;
console.log(name + "買了一只豬");
console.log(name + "看看了兜里这揣,只剩下" + money + "元.");
}
else if(money>chicken){
money -= chicken;
console.log(name + "買了一只雞");
console.log(name + "看看了兜里,只剩下" + money + "元.");
}
else if(money>fish){
money -= fish;
console.log(name + "買了一只魚");
console.log(name + "看看了兜里影斑,只剩下" + money + "元.");
}
else{
console.log(name + "嘆了口氣给赞,轉(zhuǎn)身離開.");
}
if(布爾表達(dá)式 1)
{
語(yǔ)句塊 1;
}else if(布爾表達(dá)式 2){
語(yǔ)句塊 2;
}
...
else{
語(yǔ)句塊 n;
}
if說(shuō)句可以這樣循環(huán)嵌套的寫下去,但是選項(xiàng)一多后矫户,非常不利于閱讀片迅,這時(shí)我們可以什么switch說(shuō)句來(lái)代替。
switch語(yǔ)句
switch(表達(dá)式){
case 值1:
語(yǔ)句體1;
break;
case 值2:
語(yǔ)句體2;
break;
...
default: //默認(rèn)值皆辽,當(dāng)其它條件不滿足時(shí)
語(yǔ)句體N+1;
break;
}
用switch來(lái)改來(lái)上面的代碼如下:
switch (true) {
case money >= pig:
money -= pig;
console.log(name + "買了一只豬");
console.log(name + "看看了兜里柑蛇,只剩下" + money + "元.");
break;
case money >= chicken:
money -= chicken;
console.log(name + "買了一只雞");
console.log(name + "看看了兜里,只剩下" + money + "元.");
break;
case money >= fish:
money -= fish;
console.log(name + "買了一只魚");
console.log(name + "看看了兜里驱闷,只剩下" + money + "元.");
break;
default:
console.log(name + "嘆了口氣耻台,轉(zhuǎn)身離開.");
break;
}
循環(huán)結(jié)構(gòu)
假如我們需要運(yùn)行代碼多次時(shí),我們可以使用循環(huán)結(jié)構(gòu)空另。
javaScript支持不同類型的循環(huán):
- for 多次遍歷代碼塊
- for/in 遍歷對(duì)象屬性
- while 當(dāng)指定條件為 true 時(shí)循環(huán)一段代碼塊
- do/while 當(dāng)指定條件為 true 時(shí)循環(huán)一段代碼塊
For 循環(huán)
for (語(yǔ)句 1; 語(yǔ)句 2; 語(yǔ)句 3) {
要執(zhí)行的代碼塊
}
語(yǔ)句 1 在循環(huán)(代碼塊)開始之前執(zhí)行盆耽。
語(yǔ)句 2 定義運(yùn)行循環(huán)(代碼塊)的條件。
語(yǔ)句 3 會(huì)在循環(huán)(代碼塊)每次被執(zhí)行后執(zhí)行痹换。
for (i = 0; i < 5; i++) {
console.log("數(shù)字是 " + i );
}
While循環(huán)
先判斷征字,再執(zhí)行代碼。
while (條件) {
要執(zhí)行的代碼塊
}
while (i < 10) {
console.log("數(shù)字是 " + i );
i++;
}
Do/While 循環(huán)
先執(zhí)行代碼娇豫,再進(jìn)行判斷匙姜,循環(huán)至少進(jìn)行一次。
do {
要執(zhí)行的代碼塊
}
while (條件);
do {
console.log("數(shù)字是 " + i );
i++;
}
while (i < 10);