流程控制介绍,顺序结构、分支结构、循环结构、Promise对象、throw语句、break和continue关键字
流程控制
流程控制:指代碼的執(zhí)行順序,有三種方式:順序結構、分支結構、循環(huán)結構
順序結構:
代碼從上到下,從左到右的執(zhí)行順序。
分支語句:
if語句、if-else語句、if-else if-else···語句、switch-case語句、三元表達式:
<script>// if-else語句:// if (條件) {// 要執(zhí)行的代碼1// } else {// 要執(zhí)行的代碼2// };var age = 19;if (age == 19) {console.log('等于19');};var num = prompt('請輸入數(shù)字');if (num % 2 == 0) {console.log('該數(shù)字是偶數(shù)');} else {console.log('該數(shù)字是奇數(shù)');};var result = prompt('請輸入B');if (result == 'B') {var result2 = prompt('請輸入Y');if (result2 == 'Y') {console.log('您輸入的的有效字母是:Y');} else {console.log('您輸入的無效字符是:' + result2);};} else {var result3 = prompt('請輸入T');if (result3 == 'T') {console.log('您輸入的是有效字母:T');} else {console.log('您輸入的無效字符是:' + result3);};};var num1 = 40;var num2 = 30;if (num1 > num2) {console.log(num1);} else {console.log(num2);};// 三元表達式: 條件? 表達式1: 表達式2;var age = 18;var result = age >= 18 ? '成年' : '未成年';console.log(result);var result = 5 > 3 ? '對' : '錯';console.log(result); //對var num = 2 - 1 > 5 - 6 ? 2 - 1 : 5 - 6;console.log(num); //1var str = 10 - 5 < 0 ? 5 - 5 > 0 ? 'Y' : 'N' : 5 - 5 == 0 ? 'y' : 'n';console.log(str); //y//if-else if-else語句:var score = prompt('請輸入分數(shù)');if (isNaN(score)) {console.log('輸入有誤');} else if (score > 90 && score <= 100) {console.log('A級');} else if (score > 80 && score <= 90) {console.log('B級');} else if (score > 70 && score <= 80) {console.log('C級');} else if (score > 0 && score <= 70) {console.log('成績不合格');} else if (score > 100 || score < 0) {console.log('輸入有效成績');};// switch-case:多分支語句;// 語法:switch(表達式){// case 值1 :代碼1;break;// case 值2 :代碼2;break;// case 值3 :代碼3;break;// ···// default:代碼4;break;(這里break和default可省略)// } var score = prompt('請輸入ABC等級別');switch (score) {case 'A':console.log('分數(shù)在100-90之間');break;case 'B':console.log('分數(shù)在80-70之間');break;default:console.log('分數(shù)在0-60之間');};//當好幾個case有相同的結果時,可以省略重復的代碼塊,只需要在最后一個case后面跟代碼塊:var sease = prompt('請輸入月份');switch (sease) {case '1':case '2':case '3':console.log('春季');break;case '4':case '5':case '6':console.log('夏季');break;case '7':case '8':case '9':console.log('秋季');break;case '10':case '11':case '12':console.log('冬季');break;};</script>循環(huán)結構:
while循環(huán)、do-while循環(huán)、for循環(huán)、for-in循環(huán)、for-of循環(huán):
<script>// while循環(huán)語句:先判斷條件是否成立,成立執(zhí)行大括號中的內(nèi)容,否則不執(zhí)行大口號中的內(nèi)容// while(循環(huán)條件){// 循環(huán)體// 計數(shù)器// }// while循環(huán)特點:先判斷,后循環(huán),有可能一次循環(huán)體都不執(zhí)行var i = 0;while (i < 10) {console.log(i);i++;};var i = 0;var sum = 0;while (i < 100) {sum += i;i++};console.log(sum);var i = 1;sux = 1;while (i <= 3) {sux = sux * i;i++;};console.log(sux);var i = 1;var sum = 0;while (i <= 100) {if (i % 2 == 0) {sum = sum + i;i++;} else {i++;};};console.log(sum);var sum = 0;var i = 1;while (i <= 100) {if (i % 2 != 0) {sum += i;};i++;};console.log(sum);var i = 1;while (i <= 100) {if (i % 7 == 0) {console.log(i);};i++;};var admin = prompt('請輸入賬號');var keyw = prompt('請輸入密碼');while (admin != 'admin' || keyw != '123') {admin = prompt('重新輸入賬號');keyw = prompt('重新輸入密碼');};console.log('登錄成功');//do-while循環(huán)語句:先執(zhí)行一次循環(huán),后判斷條件,成立繼續(xù)循環(huán),不成立就跳出循環(huán)。// do{// 循環(huán)體// }while(條件);// do-while循環(huán)特點:先循環(huán),后判斷,至少執(zhí)行一次循環(huán)體var i = 0;do {console.log(i);i++;} while (i < 10);do {var yn = prompt('我?guī)泦?#xff1f;請用Y或者N回答');} while (yn !== 'Y');console.log('謝謝夸獎');var sum = 0;var i = 0;do {if (i % 3 == 0) {sum += i;}i++;} while (i <= 100);console.log(sum);/* for循環(huán)語句:先執(zhí)行一次表達式1,然后判斷表達式2;如果不成立則直接跳出循環(huán),如果表達式2成立,執(zhí)行循環(huán)體的代碼,結束后,跳到表達式3執(zhí)行,然后跳到表達式2,判斷表達式2是否成立,不成立,則跳出循環(huán),如果表達式2成立,則執(zhí)行循環(huán)體,然后再跳到表達式3,再跳到表達式2,判斷是否成立,一直如此 */var sum = 0;for (var i = 1; i <= 100; i++) {sum += i;};console.log(sum);var sum = 0;for (var i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;};};console.log(sum);var sum = 0;for (var i = 1; i <= 100; i++) {if (i % 2 == 1) {sum += i;};};console.log(sum);var sum = 0;for (var i = 1; i <= 100; i++) {if (i % 3 == 0) {sum += i;};};console.log(sum);for (var i = 0; i < 6; i++) {for (var j = 0; j <= i; j++) {document.write('*');};document.write('<br>');};// for in循環(huán):用于對數(shù)組索引或者對象的屬性進行循環(huán)操作,語法:// for (變量 in 對象){// 執(zhí)行的代碼// };var obj = {name: '明明',age: '18歲'};for (var i in obj) {console.log(i);};// for-of遍歷數(shù)組的元素,鍵值對對象會報錯(不遍歷某些對象,數(shù)組對象是可以遍歷的)// for (變量 of 數(shù)組){// 執(zhí)行的代碼// };for (var k of arr) {console.log(k); //1 '2' 3 '4' 'str'}for (var k of obj) {console.log(k); //Uncaught TypeError: obj is not iterable at test.html:34};</script>break和continue關鍵字:
label語句:
label語句是用來控制break語句從哪個作用域跳出循環(huán),(默認是跳出當前循環(huán),外面的循環(huán)是不會被跳出的)label并非關鍵字,只要是非保留關鍵字都可以用來做label語句的標識符,如下面案例:
<script>iFor:for (var i = 0; i < 5; i++) {console.log('i:' + i);jFor:for (var j = 0; j < 5; j++) {console.log('j:' + j);if (j == 3) break iFor; //默認情況下回跳到jFor這里,也就是說i循環(huán)5次,每次i循環(huán)中j循環(huán)4次;當使用label語句后,i循環(huán)1次,j循環(huán)了4次};};</script>throw語句:
當運行錯誤時,使用throw語句拋出一個異常的信息,如:
<script>throw "文件不存在";//控制臺輸出:test.html:18 Uncaught 文件不存在 </script>try-catch-finally語句:
如果try代碼塊中的語句一旦拋出了異常,那么執(zhí)行流程會立即進入catch 代碼塊,如果try代碼塊沒有拋出異常,catch代碼塊就會被跳過。finally 代碼塊總會緊跟在try和catch代碼塊之后執(zhí)行,但會在try和catch代碼塊之后的其他代碼之前執(zhí)行(三個語句塊不一定同時出現(xiàn),三語句塊也可以嵌套在其他三語句中)。
<script>try {// 拋出異常時執(zhí)行的語句} catch (e) {//無異常時執(zhí)行的語句} finally {// 拋出異常或無異常時都執(zhí)行的語句}; </script>Promise對象:
ECMAScript 6中提供promise對象操作延時和異步的流程控制,Promise 對象有以下幾種狀態(tài):
- pending:初始的狀態(tài),即正在執(zhí)行,不處于 fulfilled 或 rejected 狀態(tài)。
- fulfilled:成功的完成了操作。
- rejected:失敗,沒有完成操作。
- settled:Promise 處于 fulfilled 或 rejected 二者中的任意一個狀態(tài), 不會是 pending。
- settled:Promise 處于 fulfilled 或 rejected 二者中的任意一個狀態(tài), 不會是 pending。
提示:本文圖片等素材來源于網(wǎng)絡,若有侵權,請發(fā)郵件至郵箱:810665436@qq.com聯(lián)系筆者 刪除。
筆者:苦海
總結
以上是生活随笔為你收集整理的流程控制介绍,顺序结构、分支结构、循环结构、Promise对象、throw语句、break和continue关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arraylist扩容是创建新数组吗 j
- 下一篇: ebs oracle 落伍了吗_向不了解