javaScript之分支判斷與內置對象

一,分支結構

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

1.1  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="未定義";

 1.2 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="未定義";
}

   switchelse if結構更加簡潔清晰,使程序可讀性更強,效率更高。javascript

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,不然跳出循環體

 

 

 

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相似,當條件成立循環執行語句花括號{}內的語句,不然跳出循環

 

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語句,若是要執行的語句只有一條,能夠不使用「{}」,但這種寫法並不推薦.但確實這樣能夠簡化代碼:java

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

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

 //爲了判斷用戶輸入的成績的範圍,咱們使用了多重嵌套的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循環如何工做的)dom

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>

 

 

3.1 數組 Array

 

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() 返回指定索引的位置的字符
concat() 返回字符串值,表示兩個或多個字符串的拼接
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之間的數
相關文章
相關標籤/搜索