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:可選引數,設定從哪個下標