原生JS學(xué)習(xí)筆記2——程序流程控制

js中的程序控制語(yǔ)句

常見(jiàn)的程序有三種執(zhí)行結(jié)構(gòu):

  1. 順序結(jié)構(gòu)
  2. 分支結(jié)構(gòu)
  3. 循環(huán)結(jié)構(gòu)

順序結(jié)構(gòu):程序從第一行開(kāi)始執(zhí)行昨凡,按順序執(zhí)行到最后一行

分支結(jié)構(gòu):就像一條岔路口怠堪,必須選擇且只能選擇其中一條道路繼續(xù)走下去什湘,不能同時(shí)執(zhí)行兩個(gè)分支里的代碼暑脆。

我們可以使用如下三種方式來(lái)實(shí)現(xiàn)程序的分支結(jié)構(gòu)

  • if(條件) {表達(dá)式}
  • switch(變量) case 表達(dá)式箱亿; break涣澡;
  • 表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3三目運(yùn)算

if語(yǔ)句:

我們可以通過(guò)if來(lái)實(shí)現(xiàn)一個(gè)分支結(jié)構(gòu)贱呐。if語(yǔ)句需要兩個(gè)必要的內(nèi)容:判斷條件和分支語(yǔ)句。其中判斷條件只能返回一個(gè)布爾值入桂,如果判斷條件為真奄薇,則執(zhí)行分支一,否則執(zhí)行分之二或跳過(guò)if語(yǔ)句想后邊繼續(xù)執(zhí)行抗愁。

雙分支結(jié)構(gòu)

if語(yǔ)句示例:

var age = 20;
if (age >= 18) { // 如果age >= 18為true馁蒂,則執(zhí)行if語(yǔ)句塊
    alert('adult');
} else { // 否則執(zhí)行else語(yǔ)句塊
    alert('teenager');
}

以上的示例是一個(gè)雙分支結(jié)構(gòu)呵晚,如果小括號(hào)中的條件表達(dá)式成立,則執(zhí)行第一個(gè)大括號(hào)里的代碼沫屡,否則執(zhí)行第二個(gè)大括號(hào)里的代碼饵隙。其中,else語(yǔ)句是可選的沮脖,如果沒(méi)有else語(yǔ)句金矛,判斷條件不成立就直接跳過(guò)分支,繼續(xù)向后執(zhí)行勺届。注意:當(dāng)分支中的代碼只有一行時(shí)驶俊,大括號(hào)可以省略,但是為了避免程序混亂免姿,不便于閱讀饼酿,最好不要省略。

多分支結(jié)構(gòu)

var age = 3;
if (age >= 18) {
    alert('adult');
} else if (age >= 6) {
    alert('teenager');
} else {
    alert('kid');
}

var age = 3;
if (age >= 18) {
    alert('adult');
} else {
    if (age >= 6) {
        alert('teenager');
    } else {
        alert('kid');
    }
}

我們可以通過(guò)嵌套if...else來(lái)實(shí)現(xiàn)多分支結(jié)構(gòu),請(qǐng)注意胚膊,if...else...語(yǔ)句的執(zhí)行特點(diǎn)是二選一故俐,在多個(gè)if...else...語(yǔ)句中,如果某個(gè)條件成立澜掩,則后續(xù)就不再繼續(xù)判斷了购披。

switch語(yǔ)句

前邊我們?cè)趯W(xué)分支結(jié)構(gòu)是學(xué)到了if...else...這種結(jié)構(gòu),我們可以通過(guò)if語(yǔ)句的嵌套實(shí)現(xiàn)多分支結(jié)構(gòu)肩榕,下邊將要學(xué)習(xí)一種更簡(jiǎn)單的多分支語(yǔ)句:switch...case...

語(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í)行筐乳。請(qǐng)使用 break 來(lái)阻止代碼自動(dòng)地向下一個(gè) case 運(yùn)行,如果case之后沒(méi)有break語(yǔ)句,則程序會(huì)掉入下一個(gè)case中乔妈,直到遇到第一個(gè)break或執(zhí)行完全部的case才停止蝙云。

練習(xí):判斷今天是周幾,并彈框顯示

var day=new Date().getDay();
switch (day)
{
case 0:
  x="Today it's Sunday";
  break;
case 1:
  x="Today it's Monday";
  break;
case 2:
  x="Today it's Tuesday";
  break;
case 3:
  x="Today it's Wednesday";
  break;
case 4:
  x="Today it's Thursday";
  break;
case 5:
  x="Today it's Friday";
  break;
case 6:
  x="Today it's Saturday";
  break;
}

alert(x)路召;

default關(guān)鍵詞

也許你注意到了勃刨,在上邊講解語(yǔ)法結(jié)構(gòu)是有一個(gè)default,關(guān)鍵字股淡。這個(gè)關(guān)鍵字的主要任務(wù)相當(dāng)于if語(yǔ)句中的最后一個(gè)else分支身隐,和前邊的條件都不匹配時(shí),執(zhí)行default分支唯灵。

示例:如果今天不是周六或周日贾铝,則會(huì)輸出默認(rèn)的消息:

var day=new Date().getDay();
switch (day)
{
case 6:
  x="Today it's Saturday";
  break;
case 0:
  x="Today it's Sunday";
  break;
default:
  x="Looking forward to the Weekend";
}

for循環(huán)

什么是循環(huán)?

生活中的循環(huán)隨處可見(jiàn),如:鐘表不停的轉(zhuǎn)動(dòng)垢揩,太陽(yáng)不斷的東升西落玖绿,學(xué)生們圍著跑到跑圈等等。重復(fù)的做一件事情叁巨,就是循環(huán)斑匪,如果這循環(huán)沒(méi)有停止的條件,那么就成了死循環(huán)俘种,如果循環(huán)達(dá)到了停止條件秤标,循環(huán)就結(jié)束,比如:鐘表沒(méi)電宙刘,鐘表停止運(yùn)動(dòng)苍姜,學(xué)生跑夠了一定的圈數(shù),就不用再跑了悬包。

什么時(shí)候我們會(huì)用到循環(huán)衙猪?

如果來(lái)計(jì)算1+2+3的和,應(yīng)該怎么用程序表示布近?

    var sum = 1 + 2 + 3垫释;

那如果從1一直加到10000呢?這種情況下撑瞧,在去寫(xiě)一個(gè)加法表達(dá)式就很浪費(fèi)了棵譬,我們觀察:這個(gè)任務(wù)是在重復(fù)的執(zhí)行加法運(yùn)算,唯一變化的是加數(shù)预伺,所以當(dāng)程序需重復(fù)執(zhí)行一項(xiàng)任務(wù)時(shí)订咸,我們就可以使用循環(huán)來(lái)替我們完成任務(wù)了。
JavaScript有多種循環(huán)語(yǔ)句酬诀,今天我們學(xué)習(xí)的是for循環(huán).

for循環(huán)的語(yǔ)法結(jié)構(gòu)


for (定義一個(gè)循環(huán)增量; 循環(huán)條件; 循環(huán)增量自加一) {
    循環(huán)體脏嚷;
}


我們來(lái)分析一下這個(gè)循環(huán)結(jié)構(gòu):

  • 循環(huán)增量:在這里定義一個(gè)變量,并賦初值(一般是0或1)
  • 循環(huán)條件:這是一個(gè)條件表達(dá)式瞒御,用來(lái)判斷循環(huán)條件是否滿足
  • 循環(huán)在呢過(guò)量自加一:這里在前邊定義的循環(huán)增量會(huì)進(jìn)行加一操作
  • 循環(huán)體:如果循環(huán)條件成立則反復(fù)執(zhí)行循環(huán)體父叙,一致到循環(huán)條件不成立為止

這個(gè)for循環(huán)只執(zhí)行順序如下:

699614-ff43af376724d43f.png
  1. 定義一個(gè)循環(huán)增量
  2. 判斷循環(huán)條件是否成立
  3. 成立則執(zhí)行循環(huán)體/不成立則跳過(guò)循環(huán)體,繼續(xù)向后執(zhí)行
  4. 循環(huán)增量自加一
  5. 判斷自加一后肴裙,循環(huán)條件是否成立
  6. 成立則執(zhí)行循環(huán)體/不成立則跳過(guò)循環(huán)體趾唱,繼續(xù)向后執(zhí)行
  7. 。蜻懦。甜癞。
  8. 。阻肩。。
  9. 。烤惊。乔煞。
  10. 當(dāng)遇到循環(huán)條件不成立,結(jié)束循環(huán)柒室,繼續(xù)向后執(zhí)行代碼

注意:我們?cè)趯?xiě)循環(huán)時(shí)渡贾,一定要有循環(huán)條件,否則雄右,程序會(huì)進(jìn)入死循環(huán)空骚。

示例:1+2+3+。擂仍。囤屹。+1000:

var x = 0;
var i;
for (i=1; i<=10000; i++) {
    x = x + i;
}
x; // 50005000

讓我們來(lái)分析一上邊下for循環(huán)的控制條件:

  • i=1 這是初始條件,將變量i置為1逢渔;
  • i<=10000 這是判斷條件肋坚,滿足時(shí)就繼續(xù)循環(huán),不滿足就退出循環(huán)肃廓;
  • i++ 這是每次循環(huán)后的遞增條件智厌,由于每次循環(huán)后變量i都會(huì)加1,因此它終將在若干次循環(huán)后不滿足判斷條件i<=10000而退出循環(huán)盲赊。

循環(huán)跳出語(yǔ)句

break:跳出循環(huán)铣鹏,繼續(xù)向后執(zhí)行

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script type="text/javascript">
        for(var i=0; i<10; i++){
            alert(i);
            if (i>5){
                break;
                
            }
        }
    </script>
</html>

以上程序,當(dāng)輸出到6時(shí)就停止輸出了哀蘑,因?yàn)?>5诚卸,滿足if條件,所以就跳出循環(huán)递礼,繼續(xù)向后執(zhí)行

continue:結(jié)束本次循環(huán)惨险,開(kāi)啟下次循環(huán)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script type="text/javascript">
        for(var i=0; i<10; i++){
            alert(i);
            if (i>5){
                // break;
                continue;
            }

            alert("我在continue之后執(zhí)行");
        }
    </script>
</html>

以上代碼從輸出6開(kāi)始,就不再輸出"我在continue之后執(zhí)行"這句話了脊髓,但是數(shù)字還在繼續(xù)輸出

拓展:for...in循環(huán)

for循環(huán)的一個(gè)變體是for ... in循環(huán)辫愉,它可以把一個(gè)對(duì)象的所有屬性依次循環(huán)出來(lái):

var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    alert(key); // 'name', 'age', 'city'
}

input的checked屬性

在學(xué)習(xí)HTML是我們都知道:把input標(biāo)簽的type設(shè)置為checkbox后,就是一個(gè)復(fù)選框了将硝,如果checked屬性是true恭朗,那么選框被選中;如果checked屬性設(shè)置為false依疼,則選框是取消選中狀態(tài)痰腮。下邊,我們使用js來(lái)設(shè)置選框的狀態(tài).

示例代碼:通過(guò)點(diǎn)擊切換按鈕律罢,實(shí)現(xiàn)選框的選中】取消選中效果

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <input type="button" value="切換" id="btn1" />
        <input type="checkbox" id="ch1" />
    </body>
    <script type="text/javascript">
        var btn1 = document.getElementById("btn1");
        var ch1 = document.getElementById("ch1");
        
        btn1.onclick = function (){
            
            if (ch1.checked){
                ch1.checked = false;
            }else{
                ch1.checked = true;
            }
             
        }
    </script>
</html>

練習(xí):實(shí)現(xiàn)類似購(gòu)物車(chē)的“全選”膀值、“反選”效果

示例代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <input type="button" value="全選" id="btn1" />
        <input type="button" value="反選" id="btn2" />
        <input type="checkbox" id="ch1" />
        <ul id="ul1">
            <li><input type="checkbox" /></li>
            <li><input type="checkbox" /></li>
            <li><input type="checkbox" /></li>
            <li><input type="checkbox" /></li>
            <li><input type="checkbox" /></li>
            <li><input type="checkbox" /></li>
            <li><input type="checkbox" /></li>
            <li><input type="checkbox" /></li>
            <li><input type="checkbox" /></li>
            <li><input type="checkbox" /></li>
        </ul>
    </body>
    <script type="text/javascript">
        var btn1 = document.getElementById("btn1");
        var btn2 = document.getElementById("btn2");
        var ch1 = document.getElementById("ch1");
        var ul1 = document.getElementById("ul1");
        var inputs = ul1.getElementsByTagName("input");
//      alert(inputs.length);
        
        btn1.onclick = function (){
            
            for (var i=0; i<inputs.length; i++){
                
                inputs[i].checked = true;
            }
            ch1.checked = true;
        }
        btn2.onclick = function (){
            var num = 0;
            for (var i=0; i<inputs.length; i++){
                if (inputs[i].checked==false){
                    num++;
                }
                inputs[i].checked = !inputs[i].checked;
            }
            if (num == inputs.length){
                alert("ok");
            }
        }
        
    </script>
</html>

while循環(huán)

for循環(huán)在已知循環(huán)的初始和結(jié)束條件時(shí)非常有用棍丐。而上述忽略了條件的for循環(huán)容易讓人看不清循環(huán)的邏輯,此時(shí)用while循環(huán)更佳沧踏。

while循環(huán)只有一個(gè)判斷條件歌逢,條件滿足,就不斷循環(huán)翘狱,條件不滿足時(shí)則退出循環(huán)秘案。比如我們要計(jì)算100以內(nèi)所有奇數(shù)之和,可以用while循環(huán)實(shí)現(xiàn):

var x = 0;
var n = 99;
while (n > 0) {
    x = x + n;
    n = n - 2;
}
x; // 2500

在循環(huán)內(nèi)部變量n不斷自減潦匈,直到變?yōu)?code>-1時(shí)阱高,不再滿足while條件,循環(huán)退出茬缩。

do ... while循環(huán)

do { ... } while()循環(huán)赤惊,它和while循環(huán)的唯一區(qū)別在于,不是在每次循環(huán)開(kāi)始的時(shí)候判斷條件寒屯,而是在每次循環(huán)完成的時(shí)候判斷條件:

var n = 0;
do {
    n = n + 1;
} while (n < 100);
n; // 100

用do { ... } while()循環(huán)要小心荐捻,循環(huán)體會(huì)至少執(zhí)行1次,而for和while循環(huán)則可能一次都不執(zhí)行寡夹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末处面,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子菩掏,更是在濱河造成了極大的恐慌魂角,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件智绸,死亡現(xiàn)場(chǎng)離奇詭異野揪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瞧栗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)斯稳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人迹恐,你說(shuō)我怎么就攤上這事挣惰。” “怎么了殴边?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵憎茂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我锤岸,道長(zhǎng)竖幔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任是偷,我火速辦了婚禮拳氢,結(jié)果婚禮上募逞,老公的妹妹穿的比我還像新娘。我一直安慰自己馋评,他們只是感情好凡辱,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著栗恩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洪燥。 梳的紋絲不亂的頭發(fā)上磕秤,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音捧韵,去河邊找鬼市咆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛再来,可吹牛的內(nèi)容都是我干的蒙兰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芒篷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搜变!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起针炉,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挠他,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后篡帕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體殖侵,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年镰烧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拢军。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怔鳖,死狀恐怖茉唉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情败砂,我是刑警寧澤赌渣,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站昌犹,受9級(jí)特大地震影響坚芜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斜姥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一鸿竖、第九天 我趴在偏房一處隱蔽的房頂上張望沧竟。 院中可真熱鬧,春花似錦缚忧、人聲如沸悟泵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)糕非。三九已至,卻和暖如春球榆,著一層夾襖步出監(jiān)牢的瞬間朽肥,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工持钉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衡招,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓每强,卻偏偏與公主長(zhǎng)得像始腾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子空执,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容