JS的控制語句與異常
阿新 • • 發佈:2021-07-11
if 控制語句
''' if-else基本格式 if (表示式){ 語句1; ...... }else{ 語句2; ..... };
功能說明:如果表示式的值為true則執行語句1,否則執行語句2 '''
var x= (new Date()).getDay(); // 獲取今天的星期值,0為星期天 var y; if ( (x==6) || (x==0) ) { y="週末"; }else{ y="工作日"; };
alert(y);
// 等價於 y="工作日"; if ( (x==6) || (x==0) ) { y="週末"; };
if 可以單獨使用
if語句巢狀格式 if (表示式1) { 語句1; }else if (表示式2){ 語句2; }else if (表示式3){ 語句3; } else{ 語句4; };
if (x==1){ y="星期一"; }else if (x==2){ y="星期二"; ... }else if (x==6){ y="星期六"; }else if (x==0){ y="星期日"; }else{ y="未定義"; };
switch 選擇控制語句
switch基本格式
switch (表示式) {
case 值1:語句1;break;
case 值2:語句2;break;
case 值3:語句3;break;
default:語句4;
};
switch(x){ case 1:y="星期一"; break; case 2:y="星期二"; break; case 3:y="星期三"; break; case 4:y="星期四"; break; case 5:y="星期五"; break; case 6:y="星期六"; break; case 7:y="星期日"; break; default: y="未定義";};
switch比else if結構更加簡潔清晰,使程式可讀性更強,效率更高。
首先要看一個問題,if 語句適用範圍比較廣,只要是 boolean 表示式都可以用 ifswitch為什麼效率高?判斷;而 switch 只能對基本型別進行數值比較。兩者的可比性就僅限在兩個基本型別比較的範圍內。 說到基本型別的數值比較,那當然要有兩個數。然後重點來了—— if 語句每一句都是獨立的,看下面的語句: if (a == 1) ... else if (a == 2) ... 這樣 a 要被讀入暫存器兩次,1 和 2 分別被讀入暫存器一次。於是你是否發現其實 a 讀兩次是有點多餘的,在你全部比較完之前只需要一次讀入暫存器就行了,其餘都是額外開銷。但是 if 語句必須每次都把裡面的兩個數從記憶體拿出來讀到暫存器,它不知道你其實比較的是同一個 a。 於是 switch case 就出來了,把上面的改成 switch case 版本: switch (a) { case 0: break; case 1: } 總結: 1.switch用來根據一個整型值進行多路分支,並且編譯器可以對多路分支進行優化 2.switch-case只將表示式計算一次,然後將表示式的值與每個case的值比較,進而選 擇執行哪一個case的語句塊 3.if..else 的判斷條件範圍較廣,每條語句基本上獨立的,每次判斷時都要條件載入 一次。 所以在多路分支時用switch比if..else if .. else結構要效率高。
for 迴圈控制語句
''' for迴圈基本格式 for (初始化;條件;增量) { 語句1; ... };
功能說明:實現條件迴圈,當條件成立時,執行語句1,否則跳出迴圈體 '''
for (var i=1;i<=7;i++){ document.write("<H"+i+">hello</H "+i+"> "); document.write("<br>"); }; //---------------------------------------------- var arr=[1,"hello",true]//var dic={"1":"111"} for (var i in arr){ console.log(i); console.log(arr[i]); };
注意:
doms=document.getElementsByTagName("p"); for (var i in doms) { console.log(i); // 0 1 2 length item namedItem }; // 迴圈的是你獲取的th一個DOM元素集,for in用來迴圈物件的所有屬性,dom元素集包含了你上面輸出的屬性。 // 如果你只要迴圈dom物件的話,可以用for迴圈:
for (var i=0;i<doms.length;i++) { console.log(i); // 0 1 2 // console.log(doms[i]); };
結論:for i in 不推薦使用.
while 迴圈控制語句
''' while迴圈基本格式 while (條件){ 語句1; ... };
功能說明:執行功能和for類似,當條件成立迴圈執行語句花括號{}內的語句,否則跳出迴圈 '''
var i=1; while (i<=7) { document.write("<H"+i+">hello</H "+i+"> "); document.write("<br>"); i++; } //迴圈輸出H1到H7的字型大小
<script language="JavaScript"> /* sayhello是定義的函式名,前面必須加上function和空格*/ function sayHello() { var hellostr; var myname=prompt("請問您貴姓?","苑"); hellostr="您好,"+myname+'先生,歡迎進入"探索之旅"!'; alert(hellostr); document.write(hellostr); }; //這裡是對前面定義的函式進行呼叫 sayHello(); </script>
練習:分別用for迴圈和while迴圈計算出1-100的和?
異常處理
''' try { // 這段程式碼從上往下執行,其中任何一個語句丟擲異常該程式碼塊就結束執行 } catch (e) { // 如果try程式碼塊中丟擲了異常,catch程式碼塊中的程式碼就會被執行。 // e是一個區域性變數,用來指向Error物件或者其他丟擲的物件 } finally { // 無論try中程式碼是否有異常丟擲(甚至是try程式碼塊中有return語句),finally程式碼塊中始終會被執行。 }; '''
注:主動丟擲異常 throw Error('xxxx')
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>標題</title> </head> <body> <p>p1</p> <p>p2</p> <p>p3</p> <p>p4</p> <script> /* if控制語句 */ // var name='alex'; // if (name=='mike') { // alert('mike') // }else if (name=='jack') { // alert('jack') // }else { // alert('alex') // }; /* switch控制語句 */ // var week='7'; // switch (week) { // case 1:alert('星期一'); break; // case 判斷值:執行語句; break; 如果沒有break,那麼執行完後依舊會執行下一條 // case 2:alert('星期二'); break; // case 3:alert('星期三'); break; // case 4:alert('星期四'); break; // case 5:alert('星期五'); break; // case 6:alert('星期六'); break; // case 7:alert('星期天'); break; // default: alert('未定義'); // default: 執行語句; 儘量放在最後,如果不在最後那麼後面也要加上break // } /* for迴圈 */ // for (var a=0; a<10; a++) { // // for (初始化; 條件; 增量) {執行語句}; // document.write("迴圈第" + (a+1) + "次" + "<br>") // }; // // var attr=['a', 'b', 'c', 'd'] // for (var x=0; x<attr.length; x++) { // // attr.length代表此陣列長度(4);x代表的是索引,還需要通過陣列索引進行取值 // document.write('x的值為:' + x + '<br>') // document.write('獲取到的值是:' + attr[x] + '<br>') // }; // // for (var i in attr) { // // for (初始化 in 物件) {執行語句}; i是索引並不是值;此種方法不推薦使用 // document.write('i的值為:' + i + '<br>') // document.write('獲取到的值是:' + attr[i] + '<br>') // }; // // // for (初始化 in 物件) {執行語句}; 的不便之處,在html加上幾個標籤然後再迴圈取,發現最後多出了length item namedItem,這三個為標籤屬性 // var eles_P=document.getElementsByTagName('p'); // for (var e in eles_P) { // console.log(e) // }; /* while迴圈,格式while (條件) {執行語句}; */ // var n=0, m=0; // while (n<101) { // m+=n; // n++; // 這裡是控制n的自增,很容易忘記,不控制的話進入了死迴圈 // }; // document.write(m); /* 異常 */ try { // 這段程式碼從上往下執行,其中任何一個語句丟擲異常該程式碼塊就結束執行 console.log('ok'); throw Error('***define error***') // throw Error主動丟擲異常 } catch (e) { // 如果try程式碼塊中丟擲了異常,catch程式碼塊中的程式碼就會被執行 // e是一個區域性變數,用來指向Error物件或者其他丟擲的物件 console.log(e) } finally { // 無論try中程式碼是否有異常丟擲(甚至是try程式碼塊中有return語句),finally程式碼塊中始終會被執行 console.log('finally') }; </script> </body> </html>while True: print('studying...')