1. 程式人生 > >3.26 學前端 JavaScript之控制語句

3.26 學前端 JavaScript之控制語句

控制語句

if 控制語句

功能說明

  • 如果表示式的值為true則執行語句1,
  • 否則執行語句2
//if-else基本格式
if (表示式){
    語句1;
    ......;
}
else{
    語句2;
    .....;
}

70

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;
}

70

var x= (new Date()).getDay();
if (x==1){
    y="星期一";
}else if (x==2){
    y="星期二";
}else if (x==6){
    y="星期六";
}else if (x==0){
    y="星期日";
}else{
    y="未定義";

switch 選擇控制語句

功能說明

  • 如果給定的值等於case,執行以後的所有語句
  • 否則執行default的語句
switch基本格式
switch (表示式) {
    case1:語句1;break;
    case2:語句2;break;
    case3:語句3;break;
    default:語句4;
}
70
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 與if else 的區別

  • if 語句適用範圍比較廣,只要是 boolean 表示式都可以用 if 判斷;
  • 而 switch 只能對基本型別進行數值比較。兩者的可比性就僅限在兩個基本型別比較的範圍內。
  • 說到基本型別的數值比較,那當然要有兩個數。然後重點來了——
    • if 語句每一句都是獨立的,看下面的語句:
      • if (a == 1) …
      • else if (a == 2) …
      • 這樣 a 要被讀入暫存器兩次,1 和 2 分別被讀入暫存器一次。於是你是否發現其實 a 讀兩次是有點多餘的,在你全部比較完之前只需要一次讀入暫存器就行了,其餘都是額外開銷。但是 if 語句必須每次都把裡面的兩個數從記憶體拿出來讀到暫存器,它不知道你其實比較的是同一個 a。
    • switch比else if結構更加簡潔清晰,使程式可讀性更強,效率更高。
      • 於是 switch case 就出來了,把上面的改成 switch case 版本:
    switch (a) {
        case 0:
            break;
        case 1:
    }

總結:

  1. switch用來根據一個整型值進行多路分支,並且編譯器可以對多路分支進行優化
  2. switch-case只將表示式計算一次,然後將表示式的值與每個case的值比較,進而選 擇執行哪一個case的語句塊
  3. if..else 的判斷條件範圍較廣,每條語句基本上獨立的,每次判斷時都要條件載入 一次。
  4. 所以在多路分支時用switch比if..else if .. else結構要效率高。

for迴圈基本格式

功能說明

  • 實現條件迴圈,當條件成立時,執行語句1,否則跳出迴圈體
for (初始化;條件;增量){
    語句1;
    ...
}

70

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
    //console.log(doms[i])
    }
//迴圈的是你獲取的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 迴圈控制語句

功能說明

  • 執行功能和for類似,當條件成立迴圈執行語句花括號{}內的語句,否則跳出迴圈
while迴圈基本格式
while (條件){
語句1...
}

70

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的和?
var i=1;
var sum=0;
for(i=1;i<=100;i++){
    sum+=i;
}
//-------------------//
var i=1;
var sum=0;
while(i<=100){
    sum+=i;
}

異常處理

try {
    //這段程式碼從上往下執行,其中任何一個語句丟擲異常該程式碼塊就結束執行
}
catch (e) {
    // 如果try程式碼塊中丟擲了異常,catch程式碼塊中的程式碼就會被執行。
    //e是一個區域性變數,用來指向Error物件或者其他丟擲的物件
}
finally {
     //無論try中程式碼是否有異常丟擲(甚至是try程式碼塊中有return語句),finally程式碼塊中始終會被執行。
}

注:

  • 主動丟擲異常 throw Error(‘xxxx’)