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分支男娄。

示例:如果今天不是周六或周日行贪,則會輸出默認的消息:

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標簽的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)系作者
    • 序言:七十年代末,一起剝皮案震驚了整個濱河市斜做,隨后出現(xiàn)的幾起案子苞氮,更是在濱河造成了極大的恐慌,老刑警劉巖瓤逼,帶你破解...
      沈念sama閱讀 207,113評論 6 481
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件笼吟,死亡現(xiàn)場離奇詭異库物,居然都是意外死亡,警方通過查閱死者的電腦和手機贷帮,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 88,644評論 2 381
    • 文/潘曉璐 我一進店門戚揭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撵枢,你說我怎么就攤上這事民晒。” “怎么了锄禽?”我有些...
      開封第一講書人閱讀 153,340評論 0 344
    • 文/不壞的土叔 我叫張陵潜必,是天一觀的道長。 經(jīng)常有香客問我沃但,道長磁滚,這世上最難降的妖魔是什么? 我笑而不...
      開封第一講書人閱讀 55,449評論 1 279
    • 正文 為了忘掉前任绽慈,我火速辦了婚禮恨旱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坝疼。我一直安慰自己搜贤,他們只是感情好,可當(dāng)我...
      茶點故事閱讀 64,445評論 5 374
    • 文/花漫 我一把揭開白布钝凶。 她就那樣靜靜地躺著仪芒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耕陷。 梳的紋絲不亂的頭發(fā)上掂名,一...
      開封第一講書人閱讀 49,166評論 1 284
    • 那天,我揣著相機與錄音哟沫,去河邊找鬼饺蔑。 笑死,一個胖子當(dāng)著我的面吹牛嗜诀,可吹牛的內(nèi)容都是我干的猾警。 我是一名探鬼主播,決...
      沈念sama閱讀 38,442評論 3 401
    • 文/蒼蘭香墨 我猛地睜開眼隆敢,長吁一口氣:“原來是場噩夢啊……” “哼发皿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拂蝎,我...
      開封第一講書人閱讀 37,105評論 0 261
    • 序言:老撾萬榮一對情侶失蹤穴墅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玄货,經(jīng)...
      沈念sama閱讀 43,601評論 1 300
    • 正文 獨居荒郊野嶺守林人離奇死亡皇钞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點故事閱讀 36,066評論 2 325
    • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了誉结。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹅士。...
      茶點故事閱讀 38,161評論 1 334
    • 序言:一個原本活蹦亂跳的男人離奇死亡券躁,死狀恐怖惩坑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情也拜,我是刑警寧澤以舒,帶...
      沈念sama閱讀 33,792評論 4 323
    • 正文 年R本政府宣布,位于F島的核電站慢哈,受9級特大地震影響蔓钟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卵贱,卻給世界環(huán)境...
      茶點故事閱讀 39,351評論 3 307
    • 文/蒙蒙 一滥沫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧键俱,春花似錦兰绣、人聲如沸。這莊子的主人今日做“春日...
      開封第一講書人閱讀 30,352評論 0 19
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至踪央,卻和暖如春臀玄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背畅蹂。 一陣腳步聲響...
      開封第一講書人閱讀 31,584評論 1 261
    • 我被黑心中介騙來泰國打工健无, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人液斜。 一個月前我還...
      沈念sama閱讀 45,618評論 2 355
    • 正文 我出身青樓累贤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旗唁。 傳聞我的和親對象是個殘疾皇子畦浓,可洞房花燭夜當(dāng)晚...
      茶點故事閱讀 42,916評論 2 344

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