流程控制基本概念
- 默認(rèn)情況下忙上,瀏覽器會(huì)按書(shū)寫(xiě)從上至下順序執(zhí)行程序中的每一行代碼,但是這并不能滿(mǎn)足我們所有的開(kāi)發(fā)需求;
- 為了方便我們控制程序的運(yùn)行流程,JavaScript提供3種流程結(jié)構(gòu),不同的流程結(jié)構(gòu)可以實(shí)現(xiàn)不同的運(yùn)行流程。這3種流程結(jié)構(gòu)分別是順序、選擇析既、循環(huán)三種基本控制結(jié)構(gòu)構(gòu)造.
-
順序結(jié)構(gòu):默認(rèn)的流程結(jié)構(gòu)。按照書(shū)寫(xiě)順序從上至下執(zhí)行每一條語(yǔ)句谆奥。
-
選擇結(jié)構(gòu):對(duì)給定的條件進(jìn)行判斷眼坏,再根據(jù)判斷結(jié)果來(lái)決定執(zhí)行哪一段代碼。
-
循環(huán)結(jié)構(gòu):在給定條件成立的情況下酸些,反復(fù)執(zhí)行某一段代碼宰译。
-
選擇結(jié)構(gòu)-if基本概念
.if第一種形式
- 表示如果
條件表達(dá)式
為真
,執(zhí)行語(yǔ)句塊1,否則不執(zhí)行。
if(條件表達(dá)式)
{
語(yǔ)句塊1
}
后續(xù)語(yǔ)句;
- 示例:
if(age > 18)
{
console.log("開(kāi)網(wǎng)卡");
}
2.if第二種形式
- 如果
條件表達(dá)式
為真
,則執(zhí)行語(yǔ)句塊1,否則執(zhí)行語(yǔ)句塊2
if(條件表達(dá)式)
{
語(yǔ)句塊1
}else{
語(yǔ)句塊2
}
- 示例:
if(age > 18)
{
console.log("開(kāi)網(wǎng)卡");
}else{
console.log("喊你媽來(lái)");
}
- 特點(diǎn):
- if和else后面的代碼塊({})只有一個(gè)會(huì)被執(zhí)行
3.if第三種形式
- 如果
條件表達(dá)式
1為真
,則執(zhí)行語(yǔ)句塊1,否則判斷條件表達(dá)式2
,如果為真執(zhí)行語(yǔ)句塊2,否則再判斷條件表達(dá)式3
,如果真執(zhí)行語(yǔ)句塊3, 當(dāng)表達(dá)式1擂仍、2、3都不滿(mǎn)足,會(huì)執(zhí)行最后一個(gè)else語(yǔ)句逢渔。
if(條件表達(dá)式1)
{
語(yǔ)句塊1
}else if(條件表達(dá)式2){
語(yǔ)句塊2
}else if(條件表達(dá)式3){
語(yǔ)句塊3
}else{
語(yǔ)句塊4
}
- 示例:
if(age>18)
{
console.log("給網(wǎng)卡");
}else if(age>25){
console.log("給名片");
}else if(age>40){
console.log("給房卡");
}else{
console.log("給好人卡");
}
- 特點(diǎn):
- 這么多大括號(hào)中只有一個(gè)大括號(hào)中的內(nèi)容會(huì)被執(zhí)行
- 當(dāng)執(zhí)行到后面條件的時(shí)候證明前面的條件不滿(mǎn)足
-
else if
可以只有一個(gè), 也可以有多個(gè), 但是都必須添加在if和else之間
選擇結(jié)構(gòu)-if注意點(diǎn)
- 如果只有一條語(yǔ)句時(shí)if后面的大括號(hào)可以省略
if(age > 18)
console.log("開(kāi)網(wǎng)卡");
- 注意點(diǎn):
- 受到if管制的只有緊跟其后的那條語(yǔ)句
- 在企業(yè)開(kāi)發(fā)中盡量不要省略大括號(hào)
if(false) console.log("語(yǔ)句1"); console.log("語(yǔ)句2"); // 語(yǔ)句2會(huì)被輸出
- 分號(hào)“;”也是一條語(yǔ)句, 空語(yǔ)句
if(10 > 2);
{
console.log("10 > 2");
}
// 輸出結(jié)果: 10 > 2, if管制的緊跟其后的那個(gè)分號(hào)
// 如上語(yǔ)句相當(dāng)于
if(10 > 2)
;
{
console.log("10 > 2");
}
// 如上語(yǔ)句相當(dāng)于
if(10 > 2) {
;
}
// {}在JS中僅僅代表告訴系統(tǒng)里面的語(yǔ)句是一個(gè)整體, 沒(méi)有別的用途,不會(huì)影響代碼的執(zhí)行
{
console.log("10 > 2");
}
- if else是一個(gè)整體, else匹配if的時(shí)候匹配離它最近的一個(gè)if
if(0)
if(1)
console.log("A");
else // 這個(gè)else會(huì)匹配上面的 if(1)
console.log("B");
else // 這個(gè)else會(huì)匹配上面的 if(0)
if (1)
console.log("C"); // 最終輸出C
else
console.log("D");
- 對(duì)于非Boolean類(lèi)型的值,會(huì)先轉(zhuǎn)換為Boolean類(lèi)型后再判斷
if (0) {
console.log("123\n"); // 不會(huì)被執(zhí)行
}
- 判斷變量與常量問(wèn)題
- 但凡遇到比較一個(gè)變量等于或者不等于某一個(gè)常量的時(shí)候智厌,把常量寫(xiě)在前面
// if(a = 0) // 錯(cuò)誤寫(xiě)法, 但不會(huì)報(bào)錯(cuò) /* 本來(lái)是先判斷變量a存儲(chǔ)的值是否等于0, 但是如果不小心寫(xiě)成a=0,代表把0存儲(chǔ)到a中. 為了避免這種問(wèn)題判斷是否相等時(shí)把常量寫(xiě)前面, 因?yàn)榈忍?hào)左邊只能是變量, 所以如果少寫(xiě)一個(gè)等號(hào)會(huì)報(bào)錯(cuò) */ if (0 == a) { console.log("a的值是0\n"); }else{ console.log("a的值不是0\n"); }
- 但凡遇到比較一個(gè)變量等于或者不等于某一個(gè)常量的時(shí)候智厌,把常量寫(xiě)在前面
- if語(yǔ)句可以嵌套使用
var num = 8;
if (num >= 5)
{
if(num <= 10)
{
console.log("一個(gè)5~10之間的數(shù)")
}
}