JS基礎(chǔ)--2

js中的程序控制語句

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

順序結(jié)構(gòu)

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

循環(huán)結(jié)構(gòu)

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

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

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

if(條件) {表達式}

switch(變量) case 表達式; break;

表達式1 ? 表達式2 : 表達式3三目運算

if語句:

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

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

if語句示例:

var age = 20;

if (age >= 18) { // 如果age >= 18為true,則執(zhí)行if語句塊

? ? alert('adult');

} else { // 否則執(zhí)行else語句塊

? ? alert('teenager');

}

以上的示例是一個雙分支結(jié)構(gòu),如果小括號中的條件表達式成立,則執(zhí)行第一個大括號里的代碼,否則執(zhí)行第二個大括號里的代碼。其中,else語句是可選的,如果沒有else語句,判斷條件不成立就直接跳過分支,繼續(xù)向后執(zhí)行。注意:當(dāng)分支中的代碼只有一行時,大括號可以省略,但是為了避免程序混亂,不便于閱讀,最好不要省略。

多分支結(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');

? ? }

}

我們可以通過嵌套if...else來實現(xiàn)多分支結(jié)構(gòu),請注意,if...else...語句的執(zhí)行特點是二選一,在多個if...else...語句中,如果某個條件成立,則后續(xù)就不再繼續(xù)判斷了。

switch語句

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

語法:

switch(n)

{

case 1:

? 執(zhí)行代碼塊 1

? break;

case 2:

? 執(zhí)行代碼塊 2

? break;

default:

? n 與 case 1 和 case 2 不同時執(zhí)行的代碼

}

首先設(shè)置表達式 n(通常是一個變量)。隨后表達式的值會與結(jié)構(gòu)中的每個 case 的值做比較。如果存在匹配,則與該 case 關(guān)聯(lián)的代碼塊會被執(zhí)行。請使用 break 來阻止代碼自動地向下一個 case 運行,如果case之后沒有break語句,則程序會掉入下一個case中,直到遇到第一個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)鍵詞

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

示例:如果今天不是周六或周日,則會輸出默認(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)隨處可見,如:鐘表不停的轉(zhuǎn)動,太陽不斷的東升西落,學(xué)生們圍著跑到跑圈等等。重復(fù)的做一件事情,就是循環(huán),如果這循環(huán)沒有停止的條件,那么就成了死循環(huán),如果循環(huán)達到了停止條件,循環(huán)就結(jié)束,比如:鐘表沒電,鐘表停止運動,學(xué)生跑夠了一定的圈數(shù),就不用再跑了。

什么時候我們會用到循環(huán)?

如果來計算1+2+3的和,應(yīng)該怎么用程序表示?

? ? var sum = 1 + 2 + 3;

那如果從1一直加到10000呢?這種情況下,在去寫一個加法表達式就很浪費了,我們觀察:這個任務(wù)是在重復(fù)的執(zhí)行加法運算,唯一變化的是加數(shù),所以當(dāng)程序需重復(fù)執(zhí)行一項任務(wù)時,我們就可以使用循環(huán)來替我們完成任務(wù)了。

JavaScript有多種循環(huán)語句,今天我們學(xué)習(xí)的是for循環(huán).

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

for (定義一個循環(huán)增量; 循環(huán)條件; 循環(huán)增量自加一) {

? ? 循環(huán)體;

}

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

循環(huán)增量:在這里定義一個變量,并賦初值(一般是0或1)

循環(huán)條件:這是一個條件表達式,用來判斷循環(huán)條件是否滿足

循環(huán)在呢過量自加一:這里在前邊定義的循環(huán)增量會進行加一操作

循環(huán)體:如果循環(huán)條件成立則反復(fù)執(zhí)行循環(huán)體,一致到循環(huán)條件不成立為止

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

699614-ff43af376724d43f.png

定義一個循環(huán)增量

判斷循環(huán)條件是否成立

成立則執(zhí)行循環(huán)體/不成立則跳過循環(huán)體,繼續(xù)向后執(zhí)行

循環(huán)增量自加一

判斷自加一后,循環(huán)條件是否成立

成立則執(zhí)行循環(huán)體/不成立則跳過循環(huán)體,繼續(xù)向后執(zhí)行

。。。

。。。

。。。

當(dāng)遇到循環(huán)條件不成立,結(jié)束循環(huán),繼續(xù)向后執(zhí)行代碼

注意:我們在寫循環(huán)時,一定要有循環(huán)條件,否則,程序會進入死循環(huán)。

示例:1+2+3+。。。+1000:

var x = 0;

var i;

for (i=1; i<=10000; i++) {

? ? x = x + i;

}

x; // 50005000

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

i=1 這是初始條件,將變量i置為1;

i<=10000 這是判斷條件,滿足時就繼續(xù)循環(huán),不滿足就退出循環(huán);

i++ 這是每次循環(huán)后的遞增條件,由于每次循環(huán)后變量i都會加1,因此它終將在若干次循環(huán)后不滿足判斷條件i<=10000而退出循環(huán)。

循環(huán)跳出語句

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

? ? ? ? for(var i=0; i<10; i++){

? ? ? ? ? ? alert(i);

? ? ? ? ? ? if (i>5){

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

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

continue:結(jié)束本次循環(huán),開啟下次循環(huán)

? ? ? ? for(var i=0; i<10; i++){

? ? ? ? ? ? alert(i);

? ? ? ? ? ? if (i>5){

? ? ? ? ? ? ? ? // break;

? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? }

? ? ? ? ? ? alert("我在continue之后執(zhí)行");

? ? ? ? }

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

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

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

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后,就是一個復(fù)選框了,如果checked屬性是true,那么選框被選中;如果checked屬性設(shè)置為false,則選框是取消選中狀態(tài)。下邊,我們使用js來設(shè)置選框的狀態(tài).

示例代碼:通過點擊切換按鈕,實現(xiàn)選框的選中】取消選中效果

? ? ? ?

? ? ? ?

? ? ? ? var btn1 = document.getElementById("btn1");

? ? ? ? var ch1 = document.getElementById("ch1");

? ? ? ? btn1.onclick = function (){

? ? ? ? ? ? if (ch1.checked){

? ? ? ? ? ? ? ? ch1.checked = false;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ch1.checked = true;

? ? ? ? ? ? }

? ? ? ? }

練習(xí):實現(xiàn)類似購物車的“全選”、“反選”效果

示例代碼如下:

? ? ? ?

? ? ? ?

? ? ? ?

? ? ? ? ? ?

  • ? ? ? ? ? ?

  • ? ? ? ? ? ?

  • ? ? ? ? ? ?

  • ? ? ? ? ? ?

  • ? ? ? ? ? ?

  • ? ? ? ? ? ?

  • ? ? ? ? ? ?

  • ? ? ? ? ? ?

  • ? ? ? ? ? ?

  • ? ? ? ? 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[i].checked = true;

    ? ? ? ? ? ? }

    ? ? ? ? ? ? ch1.checked = true;

    ? ? ? ? }

    ? ? ? ? btn2.onclick = function (){

    ? ? ? ? ? ? var num = 0;

    ? ? ? ? ? ? for (var i=0; i

    ? ? ? ? ? ? ? ? if (inputs[i].checked==false){

    ? ? ? ? ? ? ? ? ? ? num++;

    ? ? ? ? ? ? ? ? }

    ? ? ? ? ? ? ? ? inputs[i].checked = !inputs[i].checked;

    ? ? ? ? ? ? }

    ? ? ? ? ? ? if (num == inputs.length){

    ? ? ? ? ? ? ? ? alert("ok");

    ? ? ? ? ? ? }

    ? ? ? ? }

    while循環(huán)

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

    while循環(huán)只有一個判斷條件,條件滿足,就不斷循環(huán),條件不滿足時則退出循環(huán)。比如我們要計算100以內(nèi)所有奇數(shù)之和,可以用while循環(huán)實現(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)?1時,不再滿足while條件,循環(huán)退出。

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

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

    var n = 0;

    do {

    ? ? n = n + 1;

    } while (n < 100);

    n; // 100

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

    ? ?

  • ? ? ? ?

    ? ?

    ? ?

    ? ?

    最后編輯于
    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
    • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
      沈念sama閱讀 230,182評論 6 543
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 99,489評論 3 429
    • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
      開封第一講書人閱讀 178,290評論 0 383
    • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
      開封第一講書人閱讀 63,776評論 1 317
    • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
      茶點故事閱讀 72,510評論 6 412
    • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
      開封第一講書人閱讀 55,866評論 1 328
    • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
      沈念sama閱讀 43,860評論 3 447
    • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
      開封第一講書人閱讀 43,036評論 0 290
    • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
      沈念sama閱讀 49,585評論 1 336
    • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點故事閱讀 41,331評論 3 358
    • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
      茶點故事閱讀 43,536評論 1 374
    • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
      沈念sama閱讀 39,058評論 5 363
    • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
      茶點故事閱讀 44,754評論 3 349
    • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
      開封第一講書人閱讀 35,154評論 0 28
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
      開封第一講書人閱讀 36,469評論 1 295
    • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
      沈念sama閱讀 52,273評論 3 399
    • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
      茶點故事閱讀 48,505評論 2 379

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