流程控制:
- 計(jì)算機(jī)處理代碼的執(zhí)行過(guò)程宰僧,默認(rèn)按照自上而下的順序讀取
- 某些情況下材彪,我們是需要更改這些讀取順序。
if判斷:
- 格式1:
if(條件) 內(nèi)容
當(dāng)條件為真時(shí),輸出執(zhí)行的內(nèi)容 - 格式2:
if(條件){ 當(dāng)條件為真時(shí)查刻,輸出執(zhí)行的內(nèi)容 }
區(qū)別: 不加花括號(hào)的只能影響到緊跟在條件后的第一條語(yǔ)句键兜,而加了花括號(hào)則可以控制花括號(hào)內(nèi)的所有語(yǔ)句 - 格式3:
if(條件){
條件為真時(shí),執(zhí)行的代碼
}else{
條件為假時(shí)穗泵,執(zhí)行的代碼
}
如果...否則...
- 格式4:
if(){
//當(dāng)條件為真時(shí)普气,執(zhí)行代碼否則往下判斷
}else if(){
//當(dāng)else if的條件為真時(shí),執(zhí)行代碼佃延,否則往下判斷
}else if(){
//當(dāng)else if的條件為真時(shí)现诀,執(zhí)行代碼,否則往下判斷
}else{
//當(dāng)所有條件都為假履肃,執(zhí)行代碼
};
如果...否則如果...否則如果...否則...
巢狀分支:
巢狀分支也叫if嵌套仔沿,if語(yǔ)句允許在其中繼續(xù)嵌套if語(yǔ)句或者其他代碼
if(){
//外層if循環(huán)語(yǔ)句
if(){
//內(nèi)層嵌套的語(yǔ)句
}
}
注意:if語(yǔ)句的判斷條件很靈活,只要是能夠輸出Boolean的數(shù)據(jù)都可以當(dāng)成條件
switch分支語(yǔ)句:
switch(n){
case 1:
執(zhí)行代碼塊 1
break;
case 2:
執(zhí)行代碼塊 2
break;
default:
n 與 case 1 和 case 2 不同時(shí)執(zhí)行的代碼
}
工作原理: 首先設(shè)置表達(dá)式 n(通常是一個(gè)變量)尺棋。隨后表達(dá)式的值會(huì)與結(jié)構(gòu)中的每個(gè) case 的值做比較封锉。如果存在匹配,則與該 case 關(guān)聯(lián)的代碼塊會(huì)被執(zhí)行膘螟。
注意: 就算n與一個(gè)case的值匹配成功成福,也不會(huì)停止,而是會(huì)繼續(xù)向下匹配荆残,有時(shí)候我們并不需要它再做多余的匹配党觅,所以我們可以用 break 語(yǔ)句來(lái)阻止代碼繼續(xù)運(yùn)行蛉鹿,
break
:終止符匾,可以終止代碼執(zhí)行净薛。
三目運(yùn)算:
說(shuō)到判斷,在js里面還有一個(gè)簡(jiǎn)單的判斷方法不得不提,那就是三目運(yùn)算,又被稱為三元運(yùn)算:
條件? 語(yǔ)句一 : 語(yǔ)句二;
這就是三目運(yùn)算的結(jié)構(gòu),先寫判斷條件,條件后面跟著一個(gè)問(wèn)號(hào),再往后是兩個(gè)輸出語(yǔ)句,用冒號(hào)隔開,
如果條件為真俘闯,則輸出語(yǔ)句一潭苞、為假則輸出語(yǔ)句二
注意: 三目運(yùn)算的輸出結(jié)果會(huì)返回給它本身,所以你可以用一個(gè)變量來(lái)接收這個(gè)語(yǔ)句备徐,則可以直接用它來(lái)使用輸出比如:
//比較兩個(gè)數(shù)的大小并把大的數(shù)輸出
var i=10,j=20;
//第一種方法:
var max = i>j ? i : j;
console.log(max);
//第二種方法:
console.log(i>j ? i : j;);
三目運(yùn)算還可以嵌套三目運(yùn)算,如下例:
//判斷三個(gè)數(shù)誰(shuí)最大
var i = 10,j = 20,x = 30;
var max = i>j ? i>x ? i : x : j>x ? j : x ;
//是不是看著頭暈?zāi)垦5?這就是嵌套的一個(gè)不好的地方,不容易使人看懂,我們可以修改一下
max = i>j ?(i>x ? i : x) : (j>x ? j : x) ;
//這樣看著是不是就好看多了?還可以這樣:
max = i>j ?
i>x ? i : x :
j>x ? j : x ;
//js可以忽略掉多余的空格和換行,所以將你的代碼寫的更整潔漂亮吧
console.log(max);
注意: JS中所有的符號(hào)都必須用英文符號(hào),否則會(huì)報(bào)錯(cuò),
循環(huán)語(yǔ)句:
當(dāng)我們需要做某些大量的萄传、重復(fù)的,或者是重復(fù)但是值不同的蜜猾,這個(gè)時(shí)候如果使用循環(huán)就會(huì)很方便了
1秀菱、For循環(huán)
for (語(yǔ)句 1; 語(yǔ)句 2; 語(yǔ)句 3){
//被執(zhí)行的代碼塊
}
語(yǔ)句1:定義循環(huán)的變量,在循環(huán)(代碼塊)開始前執(zhí)行
通常我們會(huì)使用語(yǔ)句 1 初始化循環(huán)中所用的變量 (var i=0)蹭睡。
語(yǔ)句2:定義運(yùn)行循環(huán)(代碼塊)的條件
通常語(yǔ)句 2 用于評(píng)估初始變量的條件衍菱。
語(yǔ)句3:定義跳出循環(huán)的值,在循環(huán)(代碼塊)已被執(zhí)行之后執(zhí)行
通常語(yǔ)句 3 會(huì)增加初始變量的值肩豁,如遞增或遞減脊串。
for (var i=0; i<5; i++){
alert(i);
}
注意: 三個(gè)語(yǔ)句都可以忽略并寫在其他地方辫呻,但是括號(hào)里必須有兩個(gè);
,如:
var i = 0;
for(;;){
alert(i);
i++;
if(i>=5){
break;
//break,當(dāng)i>=5時(shí)終止循環(huán)
}
}
注意: 語(yǔ)句1可以寫在for循環(huán)外邊或里面琼锋,但是時(shí)變量i改變的語(yǔ)句3必須寫在for循環(huán)的內(nèi)部放闺,如果忽略掉語(yǔ)句2,則必須在循環(huán)內(nèi)部設(shè)置break來(lái)跳出循環(huán)缕坎,否則for循環(huán)會(huì)成為死循環(huán)怖侦,無(wú)法停止可能會(huì)使瀏覽器崩潰。
For/In循環(huán):
for/in語(yǔ)句可以循環(huán)遍歷對(duì)象的屬性:
var a,b;
var person = {name:"名字",age:18,}
for (a in person){
b =b + a;
}
alert(b);//得到的結(jié)果會(huì)是:名字18
for/in循環(huán)會(huì)依次遍歷對(duì)象中的屬性谜叹,并將每次得到的屬性賦值給a匾寝。
什么是對(duì)象?這個(gè)問(wèn)題會(huì)在后面的筆記中講到荷腊。
While循環(huán)和Do/While循環(huán):
while循環(huán):
while循環(huán)會(huì)在指定條件為真時(shí)循環(huán)執(zhí)行代碼塊
while (條件){
需要執(zhí)行的代碼
}
如:
var i = 1;
while(i<10){
console.log(i);
i++;
}
注意: while循環(huán)和for(;;)循環(huán)類似艳悔,也能夠執(zhí)行相同的任務(wù),所以注意女仰,一定要在循環(huán)里設(shè)置可以使循環(huán)終止的代碼猜年,如上面的i++,否則會(huì)陷入死循環(huán),可能會(huì)導(dǎo)致瀏覽器崩潰董栽。
do/while循環(huán):
do/while 循環(huán)是 while 循環(huán)的變體码倦。該循環(huán)會(huì)在檢查條件是否為真之前執(zhí)行一次代碼塊,然后如果條件為真的話锭碳,就會(huì)重復(fù)這個(gè)循環(huán),所以勿璃,do/while循環(huán)至少可以執(zhí)行一次擒抛。
do{
需要執(zhí)行的代碼
}while (條件);
var i = 0;
do{
console.log(i);
i++;
}while(i>=5);
do/while循環(huán)至少執(zhí)行一次,上面的代碼补疑,至少可以輸出一次i歧沪,
跳出循環(huán)-break和continue語(yǔ)句:
上面已經(jīng)介紹過(guò)break語(yǔ)句,現(xiàn)在我們來(lái)好好說(shuō)一下它、還有一個(gè)類似的語(yǔ)句:continue
continue同樣具有跳出的意思莲组,但和break不同的是:
- break跳出整個(gè)循環(huán)诊胞,即循環(huán)代碼執(zhí)行到break就會(huì)中斷,不在向下執(zhí)行锹杈,即使下面還有未執(zhí)行的代碼
- continue跳出這一次循環(huán)撵孤,即循環(huán)代碼碰到continue就會(huì)跳過(guò)這一次的循環(huán),但是下面的代碼繼續(xù)執(zhí)行竭望,如果有的話
我們用下面的代碼演示一下:
//使用break來(lái)跳出循環(huán)
for(var i=0;i<10;i++){
//我們了一個(gè)自增的數(shù)字,現(xiàn)在讓我們用它來(lái)輸出1邪码、2、3~~9
if(i==3){
break;
}
console.log(i);
};
//使用continue來(lái)跳出循環(huán)
for(var i=0;i<10;i++){
//我們了一個(gè)自增的數(shù)字,現(xiàn)在讓我們用它來(lái)輸出1咬清、2闭专、3~~9
if(i==3){
continue;
}
console.log(i);
}
運(yùn)行一下試試看,可以看到添加break語(yǔ)句的循環(huán)輸出的是0奴潘、1、2影钉,break之后的循環(huán)都不在執(zhí)行
而添加continue語(yǔ)句的循環(huán)輸出的是0画髓、1、2平委、4雀扶、5、6肆汹、7愚墓、8、9昂勉,只有執(zhí)行了continue語(yǔ)句的3被跳過(guò)
for和whiled的比較:
for:
var i =0;
for(;i<5;){
alert(i);
i++
};
while:
var i = 0;
while(i<5){
alert(i);
i++
};