1. 程式人生 > >JS(3)

JS(3)

1、函式
   1、函式就是一段待執行的程式碼段
   2、函式可以實現功能的封裝,可以實現程式碼的複用
   3、函式使用
     1、函式的宣告
     2、函式的呼叫
     注意 :函式先聲明後呼叫(JS中非強制)
   4、語法 :
     1、函式宣告
       1、使用function關鍵字進行函式的宣告
       et:
         function 函式名 (引數列表) {
         函式體;
         return;
         }
       2、函式名自定義,    普通函式的函式名儘量使用小寫或小駝峰
       1. JS中函式宣告使用function關鍵字
       2. 遵照變數命名規範,見名知意
       3、引數列表,引數表示函式體執行所需要的資料(可以為空,為空時()不能省略;多個引數之間使用,隔開)
          et:
         function sum (a,b){
             return a + b;
         }
       4、函式體就是待執行的程式碼段
       5、return 表示返回值,將函式體內部執行的結果傳遞給外界,只能返回一個值(返回值不需要的話,可以省略return)
          et :
         function showFn(){
             console.log("hello");
         }
      注意:return一定要寫在函式體的末尾,return關鍵字後面的程式碼都不執行
     2、函式呼叫
       語法:函式名(引數列表);
       注意:如果函式存在返回值,需要定義變數接收
             var res = 函式名();
     3、使用:
       1、函式先宣告,後呼叫(非強制)
       2、引數傳遞:           
        函式宣告時定義的引數列表,稱為形參,只宣告變數,不考慮賦值
           et:
         function sum (a,b){
             var c = a + b;
         }
        函式呼叫時給出的引數,是實際引數。呼叫的過程中,將實際引數賦值給形參,參與函式體中程式碼的執行。
           et:
         sum(10,20);  //a = 10;b = 20;
      3、函式可以宣告多個引數,使用,隔開
      4、函式宣告和呼叫時的引數個數可以不匹配
           et:
         sum(10);
         sum(10,20,30);
     4、匿名函式
       省略函式名的函式
       語法:
        1、var fn = function(){}
           將匿名函式儲存給一個變數,使用變數名()的方式呼叫
        et: var fn = function (){
                 函式體;
             };
             fn();
        2、匿名函式自執行
            (function(a,b){
             console.log("自執行");
        })(10,20);
        第一個()中表示匿名函式,正常書寫
        第二個()中表示函式呼叫,正常傳參
        練習:
          改版日期計算器:
         1. 在頁面中新增按鈕,點選時執行程式
            <button onclick="alert();"></button>
         2. 將閏年判斷的程式碼封裝成函式
         3. 整體計算過程封裝成函式,按鈕點選呼叫

2、變數作用域
   1、變數起作用的範圍   
   2、分類 :
     1、全域性作用域
         處在全域性作用域中的變數就是全域性變數,在整個程式的任何地方都可以訪問和使用。
         使用:
        1. 所有在函式外部通過var宣告建立的變數,都是全域性變數(在任何地方都可以訪問)
        2. 宣告變數時,省略var關鍵字建立的變數,都是全域性變數(推薦使用var關鍵字,不要省略)
     2、區域性作用域 (JS中區域性作用域指的是函式作用域)
     在函式體內部起作用的變數,稱為區域性變數
     函式體的{}就是區域性作用域
     使用:
       1、在函式內部使用var關鍵字定義的變數都是區域性變數,只在當前函式作用域(函式體)中可以訪問,外界無法訪問
       2、區域性變量出了函式就不能訪問了
     注意 :
         在函式中訪問變數,
             1. 如果當前函式中沒有該變數,就訪問全域性作用域中的變數
             2. 如果當前函式中定義了該變數,全域性中也有相同的變數名,函式就近訪問變數 
     3、作用域查詢:
     如果函式內部與外部定義了同名的變數,函式體中訪問,採用就近原則。
     先查詢當前區域性作用域,找不到再到上一級作用域中查詢

3、陣列Array
   1、有序的元素序列,用來存放一些資料
     (陣列中的元素會自動分配下標,從0開始,方便讀寫)
   2、建立陣列
     1、建立空陣列
         var 陣列名 = [];
             et:var arr1 = [];            //建立空陣列
     2、建立空陣列
         var 陣列名 = new Array();    
         et:var arr2 = new Array();   //建立空陣列
     3、初始化元素
         1、建立陣列的同時初始化元素
        var 陣列名 = [元素1,元素2,...];
           et:var arr3 = [10,20,30];
     2. 根據下標初始化元素 :
        陣列會為元素自動分配下標,從0開始
         var arr4 = [];
         arr4[0] = 100;
         ...
         arr4[3] = 200;
     3. 使用new關鍵字初始化
        var 陣列名 = new Array(元素1,元素2,...);
           et:var arr5 = new Array(10,20,30);
     4. 初始化陣列長度
        var 陣列名 = new Array(Num);
        只包含一個數值引數時,表示初始化陣列長度
            et:var arr6 = new Array(5);//建立長度為5的陣列
   3、使用:
       1、使用"陣列名[index]"的方式運算元組元素
          語法:陣列名[下標];
          說明:陣列中每一個元素都有對應的下標,元素的下標範圍 0 -> length-1
         根據下標訪問元素 :arr[8]
         根據下標修改元素 :var a = arr[8];
       2、陣列是物件型別
         物件是由屬性和方法組成的
         通過點語法訪問物件的屬性和方法
     屬性:
        1、length:獲取陣列長度
           使用:陣列名.length;
          et:arr.length;    
        3、清空陣列中元素:
         arr.length = 0;
       3、遍歷陣列
         迴圈輸出陣列元素
         et:
             //正序
         for(var i = 0; i <= arr.length - 1; i ++){
                console.log(arr[i]);
         }
         //倒序
         for(var i = arr.length -1; i >= 0 ; i --){
                console.log(arr[i]);
         }
     練習 1:
         1. 迴圈接收使用者輸入的資料
         2. 將使用者輸入的資料存在陣列中
         3. 當用戶輸入exit時,停止輸入
         4. 儲存結束之後,輸出陣列元素
     練習 2:
         建立包含若干元素的陣列(number),
         遍歷陣列,輸出最大值
     練習 3:
         建立包含若干數字的陣列,接收使用者輸入,
         判斷陣列中是否存在使用者輸入的數字,存在
         則返回對應的下標,不存在提示使用者資料不存在
     練習 4:
         建立陣列,儲存三個資料(number),比較資料大小,
         並進行排序,最終按照從小到大的順序輸出

  4、常用方法:
     1、常用API
      1、toString()
       將陣列內容轉換為字串,並返回。
      2、join()
           將陣列中元素拼接成一個字串,並返回
       引數 :可以指定陣列元素之間的連線符,省略的話,預設以逗號連線。
         et:
         var arr = [1,2,3];
         arr.join();   //返回字串 "1,2,3"
         arr.join('-'); //返回字串 "1-2-3"
      3、reverse()
            反轉陣列元素,倒序重排元素
        返回反轉後的陣列
        注意:
           reverse()是對當前陣列結構的調整,不會生成新的陣列,
           直接反轉原始陣列,可以不接收返回值。
      4、sort()
            1、將陣列內容進行排序,返回排序後的陣列
            2、預設按照Unicode編碼升序排列
              注意:
                 sort()方法也是對陣列結構的調整,直接對原陣列的元素進行排序,會改變原始陣列
            3、引數可以為自定義的排序函式
         et:
            function sortAsc(a,b){
                return b - a;  // b-a兩兩比較,倒序排列
            }
            arr.sort(sortAsc);
            console.log(arr);
      5、push(data)
         表示在陣列的末尾追加元素
         引數 :可以是一個,也可以是多個,多引數之間使用逗號隔開。
         返回值 :返回新陣列的長度
      6、pop()
         表示刪除陣列最後一個元素
         返回值 :返回被刪除的元素
         陣列的儲存結構 :
         陣列在記憶體中使用棧結構儲存,先進後出
      7、unshift(data)
         向陣列的頭部新增元素
         引數 :可以是一個元素,也可以是多個元素
         返回值 : 返回新增元素之後的陣列長度
      8、shift()
             刪除陣列的頭部元素
         返回值 :返回被刪除的元素

  5、二維陣列
     陣列中的每一個元素的是一個小陣列
      er:
        var arr = [["唐僧","悟空"],["寶玉","寶釵"],["伏地魔"]];
      訪問元素:
        arr[0];    //["唐僧","悟空"]
        arr[0][0]; //"唐僧"
   練習:
       1、接收使用者輸入的數字
       2、轉換為二進位制並輸出
             var n = 10;
         10 / 2 = 5  ------ 0
         5 / 2 = 2 ---------1
         2 / 2 = 1 ---------0
         1 / 2 = 0 ---------1
         10的二進位制 1010       

4、JS的內建物件
   1、物件:
     物件由屬性和方法組合,可以使用點語法訪問物件的屬性和方法
         et :
         var arr = [1,2,3];
         arr.length;   //訪問屬性
         arr.push(100); //訪問方法
   2、物件分類
     1、內建物件:
             由ECMAScript規定,例如陣列,字串,Math,Date...
     2、BOM 物件:
             瀏覽器物件模型,瀏覽器各大廠商制定,提供一系列與瀏覽器操作相關的物件
     3、DOM 物件:
         文件物件模型,提供一系列規範的操作文件的物件
     4、自定義物件
   3、內建物件分類:
     1、String 物件
       1、建立:
             var str1 = "hello";
         var str2 = new String("world");
       2、屬性和方法
         1、屬性:
       length:獲取字串長度
           var s = "hello";
           var s2 = "h e l l o";
           s.length; //5
           s2.length; //9
         2、方法:
       1、英文字串的大小寫轉換
         1、toUpperCase()  轉換為全大寫字母
         2、toLowerCase()  轉換為全小寫字母
         注意:該方法會返回新的字串,不影響原始字串
         練習:
           1、建立陣列,儲存陣列和字母
           2、生成隨即6位的驗證碼
                 從陣列中隨機抽取6位元素,組成驗證碼
                 隨機數:Math.random();
                 生成[0,1)之間的隨機數
           3、生成的驗證碼提示給使用者輸入
           4、驗證使用者輸入的是否正確
                 在不區分大小寫的情況下,只要輸入正確都提示"輸入正確"
       2、獲取字元或字元編碼
         1、獲取指定位置的字元
            charAt(index);
         2、獲取指定位置的字元對應的編碼
                charCodeAt(index);
           3、檢索字串
          1、indexOf(value[,fronIndex])
             作用:獲取指定字元的下標
         引數:
           1、value: 必填,設定查詢字符集
           2、fromIndex:可選引數,設定從哪個下標