天天看點

javaScript之分支判斷與内置對象

一,分支結構

  • 單一選擇結構(if)
  • 二路選擇結構(if/else)
  • 内聯三元運算符 ?:
  • 多路選擇結構(switch)

1.1  if 控制語句

if-else基本格式:

if (表達式){
語句1;
......
}else{
語句2;
.....
}

功能說明
如果表達式的值為true則執行語句1,
否則執行語句2
      
javaScript之分支判斷與内置對象
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;
}
      
javaScript之分支判斷與内置對象

示例:

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

 1.2 switch 選擇控制語句

switch基本格式:

switch (表達式) {
    case 值1:語句1;break;
    case 值2:語句2;break;
    case 值3:語句3;break;
    default:語句4;
}
      
javaScript之分支判斷與内置對象
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結構更加簡潔清晰,使程式可讀性更強,效率更高。

switch為什麼效率高?

首先要看一個問題,if 語句适用範圍比較廣,隻要是 boolean 表達式都可以
用 if 判斷;而 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結構要效率高。
      

 1.3 for循環控制語句

for循環基本格式:

for (初始化;條件;增量){
    語句1;
    ...
}

功能說明:
實作條件循環,當條件成立時,執行語句1,否則跳出循環體
      
javaScript之分支判斷與内置對象
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])
    }
      

 1.4  while 循環控制語句

while循環基本格式:

while (條件){
語句1;
...
}

功能說明:
運作功能和for類似,當條件成立循環執行語句花括号{}内的語句,否則跳出循環
      
javaScript之分支判斷與内置對象
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>
      

 1.5 異常處理

try {
    //這段代碼從上往下運作,其中任何一個語句抛出異常該代碼塊就結束運作
}
catch (e) {
    // 如果try代碼塊中抛出了異常,catch代碼塊中的代碼就會被執行。
    //e是一個局部變量,用來指向Error對象或者其他抛出的對象
}
finally {
     //無論try中代碼是否有異常抛出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執行。
}
      
var condition = true; if (condition) {
      alert("我将出現!");
  }
  condition = false; if (condition) {
      alert("我不會出現!");
  } else {
      alert("我會出現!");
  }
  condition ="some string"; if (condition) {
      alert("可以直接對任何資料類型進行if判斷,在判斷時計算會自動将其轉換成布爾值!");
  } var val = condition?"當為true時我将被傳回":"當為false時我将被傳回";
  alert(val);//将輸出"當為true時我将被傳回"
      

  對于if..else語句,如果要執行的語句隻有一條,可以不使用“{}”,但這種寫法并不推薦.但确實這樣可以簡化代碼:

var str="one";if (str=="one")alert("str的值為字元串‘one’";else alter("not one"))
      

  雖然JavaScript中沒有if …. elseif 結構,但可以使用if…else的簡寫方式得到

//為了判斷使用者輸入的成績的範圍,我們使用了多重嵌套的if .. else語句
    var num = window.prompt("請輸入XXX的成績!","");
    num *=1;//window.prompt方法始終隻傳回字元串,用這樣的方法将其轉換成數字
    if (isNaN(num) && num) {//不能将其它值轉換成數字時将傳回NaN,可以用内置的isNaN判斷值是否是NaN
        alert("您輸入的不是一個數字!");
    } else { if (num<=100 && num>=90) {
            alert("Excellent!");
        } else { if (num =80) {
                alert("Good!");
            } else { if (num < 80 && num >= 70) {
                    alert("So so!");
                } else { if (num < 70 && num >=60) {
                        alert("Be careful !!!");
                    } else { if (num < 60 && num >= 0) {
                            alert("Oh, NO!");
                        } else {
                            alert("USB!");
                        }
                    }
                }
            }
        }    
    } //上面的代碼由于用了多重的if..else嵌套,顯得非常的混亂,簡化隻須将else後的花括号去掉就行了
    // if (...) {...}這算是一句
    if (isNaN(num)) {
        alert("您輸入的不是一個數字!");
    } else if (num<=100 && num>=90) {
        alert("Excellent!");
    } else if (num =80) {
        alert("Good!");
    } else if (num < 80 && num >= 70) {
        alert("So so!");
    } else if (num < 70 && num >=60) {
        alert("Be careful !!!");
    } else if (num < 60 && num >= 0) {
        alert("Oh, NO!");
    } else {
        alert("USB!");
    } //看上去清晰多了,但要注意的是,JavaScript中沒有elseif 這樣的文法,是以上的else if之間是有空格的
      

  用于進行多次判斷的switch語句

switch(condition) { //switch本來就是跳轉的意思(又稱為“開關”),是以switch語句就是判斷情況,跳到符合的情況開始執行
        case 4:
            alert("c的值是4"); case 3:
            alert("c的值肯定大于等于3"); case 2:
            alert("c的值肯定大于等于2"); case 1:
            alert("c的值肯定大于等于1");
    } //可以使用 break來隻執行符合一個條件的語句
    switch(condition) { case 4:
            alert("c的值是4"); break; case 3:
            alert("c的值是3"); break; case 2:
            alert("c的值是2"); break; case 1:
            alert("c的值是1"); break;
    } var condition="one"; switch(condition) {//switch不但可以用來判斷數字,還可以判斷字元串,甚至是不定的變量
        case "one":
            alert("condition的值是字元串'one' !"); break; case "three":
            alert("condition的值是字元串'three' !"); break; case "four":
            alert("condition的值是字元串'four' !"); break; case "five":
            alert("condition的值是字元串'five' !"); break; default://當所有情況都不比對時,将執行default語句後的
            alert("我們要萬無一失!condition什麼都不是!");
      

  

二,循環

循環用來指明當某些條件保持為真時要重複的動作。當條件得到滿足時,就跳出循環語句。在JavaScript中有四種循環結構可用。

  • 由計數器控制的循環(for)
  • 在循環的開頭測試表達式(while)
  • 在循環的末尾測試表達式(do/while)
  • 對對象的每個屬性都進行操作(for/in)

for 語句指定了一個計數器變量,一個測試條件,以及更新該計數器的操作。在每次循環的重複之前,都将測試該條件。如果測試成功,将運作循環中的代碼。如果測試不成功,不運作循環中的代碼,程式繼續運作緊跟在循環後的第一行代碼。在執行該循環後,計算機變量将在下一次循環之前被更新。

for (var i=0;i<10;i++) {//for循環的圓括号裡面須放三個句子,
    //分别是1.初使化計數器 2.判斷條件 更新計數器
        alert("i目前的值為"+i);
    }
      

  其實for循環語句完全可以這樣寫,下面的代碼和上面的效果是一樣的(雖然沒有必要,但從這樣的代碼可清楚看出for循環如何工作的)

var i=0;//循環進行之前初始化i
    for(;;) {//for語句括号中必須有三個語句,但可以為空語句
        if (i<10) {//當條件為true時才執行代碼
            alert("i目前的值為"+i);
        } else {//當條件為false時就退出循環
            break;//使用break退出循環
 }
    }
      

  一個死循環最能說明while的工作方式了(但這樣的錯誤我們絕不能在實際程式設計中出現)

while (true) {
        alert("你關不掉我的!");//這就是網上那些所謂的高手寫的“關不上的窗(周傳雄新歌,力薦)”代碼
    }
      

  do..while循環與while循環不同之處在于它至少将代碼塊中的代碼執行一次

do {
        alert("我肯定會出現一次的");
    } while (false);
      

三,常用内置對象

  從傳統意義上來說,ECMAScript 并不真正具有類。事實上,除了說明不存在類,在 ECMA-262 中根本沒有出現“類”這個詞。ECMAScript 定義了“對象定義”,邏輯上等價于其他程式設計語言中的類。

  所謂内置對象就是ECMAScript提供出來的一些對象,我們知道對象都是有相應的屬性和方法,其實這裡很多的js對象跟python的很多文法類似。

對象的概念與分類

  • 由ECMAScript定義的本地對象.獨立于宿主環境的 ECMAScript 實作提供的對象.(native object)
  • ECMAScript 實作提供的、獨立于宿主環境的所有對象,在 ECMAScript 程式開始執行時出現.這意味着開發者不必明确執行個體化内置對象,它已被執行個體化了。ECMA-262 隻定義了兩個内置對象,即 Global 和 Math (它們也是本地對象,根據定義,每個内置對象都是本地對象)。(built-in object)
  • 所有非本地對象都是宿主對象(host object),即由 ECMAScript 實作的宿主環境提供的對象。所有 BOM 和 DOM 對象都是宿主對象。

object對象:ECMAScript 中的所有對象都由這個對象繼承而來;Object 對象中的所有屬性和方法都會出現在其他對象中。

ToString() :  傳回對象的原始字元串表示。

    ValueOf()  : 傳回最适合該對象的原始值。對于許多對象,該方法傳回的值
都與 ToString() 的傳回值相同。
      

11種内置對象

包括:

  Array ,String , Date, Math, Boolean, Number  Function, Global, Error, RegExp , Object

簡介:

  在JavaScript中除了null和underfined以外的其他的資料類型都被定義成了對象,也可以用建立對象的方法定義變量,String,Math,Array,Date,RegExp都是JavaScript中重要的内置對象,在JavaScript程式中大多數功能都是通過對象實作的

<script language="javascript">

    var aa=Number.MAX_VALUE; 
    //利用數字對象擷取可表示最大數

    var bb=new String("hello JavaScript"); 
    //建立字元串對象

    var cc=new Date();
    //建立日期對象

    var dd=new Array("星期一","星期二","星期三","星期四"); 
    //數組對象

</script>
      
javaScript之分支判斷與内置對象

3.1 數組 Array

javaScript之分支判斷與内置對象
javaScript之分支判斷與内置對象

1.數組的建立方式

  • 字面量方式建立(推薦大家使用這種方式,簡單粗暴)
var colors = ['red','color','yellow'];
      
  • 使用構造函數(後面會講)的方式建立 使用new關鍵詞對構造函數進行建立對象
var colors2 = new Array();
      

2,數組的指派

var arr = [];
//通過下标進行一一指派
arr[0] = 123;
arr[1] = '哈哈哈';
arr[2] = '嘿嘿嘿'
      

3 數組的常用方法

方法 描述
concat() 把幾個數組合并成一個數組
join() 傳回字元串,其中包含了連接配接到一起的數組中的所有元素,元素由指定的分割符分割開來
pop() 移除數組的最後一個元素
shift() 移除數組的第一個元素
unshift() 往數組的開頭添加一個元素,并且傳回新的長度
slice(start,end) 傳回數組的一段
push() 往數組的最後添加一個元素,并傳回新的長度
sort() 對數組進行排序
reverse() 對數組進行反轉
length 它是一個屬性,唯一的一個,擷取數組的長度,可以結合for循環周遊操作

3.2 字元串String

charAt() 傳回指定索引的位置的字元
傳回字元串值,表示兩個或多個字元串的拼接
match() 傳回正規表達式模式對字元串進行産找,并将包含查找結果作為結果傳回(後面正規表達式課程會詳細講)
replace(a,b) 字元串b替換了a
search(stringObject) 知名是否存在相應比對。如果找到一個比對,search方法将傳回一個整數值,指明這個比對距離字元串開始的偏移位置。如果沒有找到比對,傳回-1
slice(start,end) 傳回start到end-1之間的字元串,索引從0開始
split(’a‘,1) 字元串拆分,以a拆分,第一個參數傳回數組的最大長度
substr(start,end) 字元串截取,左閉右開
toUpperCase() 傳回一個新的字元串,該字元串字母都變成了大寫
toLowerCase() 傳回一個新的字元串,該字元串字母都變成了小寫
//1.将number類型轉換成字元串類型
var num = 132.32522;
var numStr = num.toString()
console.log(typeof numStr)
      
//四舍五入
var newNum = num.toFixed(2)
console.log(newNum)
      

3.3 Date日期對象

建立日期對象隻有構造函數一種方式,使用new關鍵字

//建立了一個date對象
var myDate = new Date();
      

  常用的方法

文法 含義
getDate() 根據本地時間傳回指定日期對象的月份中的第幾天(1-31)。
Date() 根據本地時間傳回當天的日期和時間
getMonth() 根據本地時間傳回指定日期對象的月份(0-11)
getFullYear() 根據本地時間傳回指定日期對象的年份(四位數年份時傳回四位數字)
getDay() 根據本地時間傳回指定日期對象的星期中的第幾天(0-6)
getHours() 根據本地時間傳回指定日期對象的小時(0-23)
getMinutes() 根據本地時間傳回指定日期對象的分鐘(0-59)
getSeconds() 根據本地時間傳回指定日期對象的秒數(0-59)

3.4 Math 内置對象

  常用内置對象

Math.floor() 向下取整,稱為"地闆函數"
Math.ceil() 向上取整,稱為'地闆函數'
Math.max(a,b) 求a和b中的最大值
Math.min(a,b) 求a和b中的最小值
Math.random() 随機數,預設0-1之間的随機數,公式min+Math.random()*(max-min),求min~max之間的數

不經一番徹骨寒 怎得梅花撲鼻香