JS學習小結(上)
學而時習之,不亦說乎,開啟JS學習新樂章~
JS是幹啥的?網頁特效,它主要是實現控制結構和樣式,是一種行為,有多重要,不言而喻吧,頁面炫酷的資本。
1. JS輸出:
1 alert("hello World!") //第一種輸出, alert 屬於 window 對象,一般省略。 2 console.log() 3 console.warn() 4 console.error()//第二種輸出,只在控制臺輸出,包含正常、警告、錯誤等信息,方便進行錯誤定位 5 document.write()//第三種輸出,文檔打印
2. 變量,就是一個容器 用來裝東西的,變量具有不同的基本數據類型,變量有局部變量和全局變量之分,具體區別主要體現在作用域上,這裏需要註意的是,寫在函數體內部,但是沒有var 聲明的變量也是全局變量:
1 var //變量申明符 2 var carName = "hello"; //單雙引是不分的哦,字符型,可通過“+”來連接,String()/.valueOf/.toString()來強制轉換 3 var carNum = 12; //數值型,可通過Number()來轉換,亦可通過內置函數parseInt()取整,parseFloat()取浮,isNaN()來判斷是否為數值 4 var car = true; // boolean , 可通過Boolean()來轉換 5 var a = new Object(); //引用型,Object包括:Int,Float,String,Function,Boolean,Array6 var timer = null; // 空類型 null 7 var test; // 聲明變量未給值 undefined,null == undefined(true)
3. JS書寫位置
1 <a href=”javascript:void(0)”></a> //行內式 2 <script type=”text/javascript”>...事件代碼...</script> //內嵌式 3 <script src="hello.js" type="text/javascript"></script> //外鏈式
4. 事件,前面說過JS是一種行為,行為就是事件, 事件三要素: 事件源,事件,事件處理程序三部分組成,通常以匿名的形式出現:
事件源.事件 = function() { 事件處理語句;} //匿名函數
1 <script> 2 // 獲取元素 3 var one = document.getElementById("one"); // 獲取第2個li 4 var two = document.getElementById("two"); // 獲取第2個li 5 var pic = document.getElementById("pic"); // pic 6 // 操作元素 7 // 事件源.事件 = function() {} 8 two.onclick = function() { 9 pic.src = "images/02.jpg"; 10 } 11 one.onclick = function() { 12 pic.src = "images/01.jpg"; 13 } 14 </script> 15 /* 16 這裏的時間不僅僅局限於noclick,也可以是ondblclick,onkeyup,onchange,onfocus,onblur ,onmouseover ,onmouseout ,onload,onunload等 17 18 */
5. 函數,函數是由事件驅動的或者當它被調用時執行的可重復使用的代碼塊。通常情況下,函數構建具有三種方式:
<script type="text/javascript"> // 盡量要求形參和實參相互匹配,靜態方法 function fn(a,b) { console.log(a+b); return 3; // 終止程序執行,不會執行return 後面的語句 } console.log(fn(1,2));// 調用函數,並且遵循先聲明後調用的基本準則 // 動態匿名方法 var fun =new function(‘a‘,‘b‘,‘return a+b;‘);單雙引號不分哦,不交叉使用即可 // 直接量方法 var fun = function(){ console.log(1); }
進行new 操作實現函數構建,與普通方式構建函數差距很明顯,new之後會將其看作是對象處理,必然會返回一個對象了,然後就可以更加靈活的使用構造方法以及我們熟悉好用的this。
1、函數預編譯過程 this —> window
2、全局作用域裏 this —> window
3、obj.func(); func()裏面的this指向obj), 可以這樣理解,誰調用func,則this就指向誰
4、call/apply 可以改變函數運行時this指向,
(1)、call用法:
func.call(要改變後的this, arg1, arg2, ... );
(2)、apply用法:
func.apply(要改變後的this, [arg1, arg2, arg2]);
(3)、apply和call共同點:都是改變this指向,apply和call不同點:傳參形式不同,call是將參數一個個傳進來,而apply是將所有參數存進一個數組中,然後將該數組傳,如下demo:
function demo1() { console.log(this); } // demo1() <==> this.demo1(); <==> window.demo1() demo1(); // window // demo2 var demo2 = { retThis: function () { console.log(this); } } demo2.retThis(); // demo2 = {...} // call / apply改變this demo1.call(demo2); // demo2 = {} demo2.retThis.call(window); // window
6. 流程,流程控制語句包括:循環,跳轉,選擇以及異常處理:
<html> <body> <script type="text/javascript"> //for循環 let array1 = [‘a‘,‘b‘,‘c‘]; for (let i = 0;i < array1.length;i++){ console.log(array1[i]); // a b c } //while循環 var j= 1; while(j>0){ console.log(j); j--; } //do while循環 do{ console.log(j); j--; }while(j>0); //for in循環 var array = [1,2,3,4]; for(let index in array) { console.log(index,array[index]); }; var A = {a:1,b:2,c:3,d:"hello world"}; for(let k in A) { console.log(k,A[k]); } //跳轉包括:return; break; continue; //選擇包括if(判斷語句){。。}else{}, if(判斷語句){}else if(判斷語句){}else{} // 異常語句 try{ console.log(b); console.log("我不會輸出的,不要找了") } catch(error){ console.log("發生錯誤了") } finally { console.log("不管發生不發生錯誤,我都會執行") } console.log("我try catch後面的代碼") //選擇語句 var i = 4; switch (i){ //i表示要判斷的值 case 0: document.write("星期天") break; case 1: //case裏面都是所對應的值,每一個代碼段後都要加上一個break讓他跳出判斷 document.write("星期一") break case 2: document.write("星期二") break case 3: document.write("星期三") break; case 4: document.write("星期四") break; default: //default的意思是以上case裏的值都不是的話,執行default語句裏的代碼段 document.write("什麽都不是") } </script> </body> </html>
7. 數組,顧名思義,數據的集合,其構建及常見方法如下:
<script type="text/javascript"> //構建 var arr1 = new Array(); //創建一個空數組 var arr2 = new Array(20); // 創建一個包含20項的數組 var arr = new Array("lily","lucy","Tom"); // 創建一個包含3個字符串的數組 var arr4 = []; //創建一個空數組 var arr5 = [20]; // 創建一個包含1項的數組 var arr6 = ["lily","lucy","Tom"]; // 創建一個包含3個字符串的數組 //常規方法 //join(),將數組的元素組起一個字符串,以"-"為分隔符,可重復插入字符串 arr.join("-") //push(), 可以接收任意數量的參數,把它們逐個添加到數組末尾,並返回修改後數組的長度 var count = arr.push("Jack","Sean"); console.log(count); // 5 console.log(arr); // ["Lily", "lucy", "Tom", "Jack", "Sean"] //pop(), 數組末尾移除最後一項,減少數組的 length 值,然後返回移除的項 var item = arr.pop(); console.log(item); // Sean console.log(arr); // ["Lily", "lucy", "Tom", "Jack"] //shift(), 刪除原數組第一項,並返回刪除元素的值 var item = arr.shift(); console.log(item); // Jack console.log(arr); // ["Sean", "Lily", "lucy", "Tom"] //unshift, 將參數添加到原數組開頭,並返回數組的長度 var count = arr.unshift("Jack","Sean"); console.log(count); // 5 console.log(arr); //["Jack", "Sean", "Lily", "lucy", "Tom"] //sort(), 按升序排列數組項 var arr1 = ["a", "d", "c", "b"]; console.log(arr1.sort()); // ["a", "b", "c", "d"] arr2 = [13, 24, 51, 3]; console.log(arr2.sort()); // [13, 24, 3, 51] console.log(arr2); // [13, 24, 3, 51](原數組被改變,字符串比較原則) //reverse(), 反轉數組項的順序 var arr = [13, 24, 51, 3]; console.log(arr.reverse()); //[3, 51, 24, 13] console.log(arr); //[3, 51, 24, 13](原數組改變) //concat(), 將參數添加到原數組中。 var arr = [1,3,5,7]; var arrCopy = arr.concat(9,[11,13]); console.log(arrCopy); //[1, 3, 5, 7, 9, 11, 13] console.log(arr); // [1, 3, 5, 7](原數組未被修改) //slice(), 返回從原數組中指定開始下標到結束下標之間的項組成的新數組(切片) var arr = [1,3,5,7,9,11]; var arrCopy = arr.slice(1); var arrCopy2 = arr.slice(1,4); var arrCopy3 = arr.slice(1,-2); var arrCopy4 = arr.slice(-4,-1); console.log(arr); //[1, 3, 5, 7, 9, 11](原數組沒變) console.log(arrCopy); //[3, 5, 7, 9, 11] console.log(arrCopy2); //[3, 5, 7] console.log(arrCopy3); //[3, 5, 7] console.log(arrCopy4); //[5, 7, 9] //splice(), 很強大的數組方法,它有很多種用法,可以實現刪除、插入和替換 var arr = [1,3,5,7,9,11]; var arrRemoved = arr.splice(0,2); console.log(arr); //[5, 7, 9, 11] console.log(arrRemoved); //[1, 3] var arrRemoved2 = arr.splice(2,0,4); console.log(arr); // [5, 7, 4, 9, 11] console.log(arrRemoved2); // [] var arrRemoved3 = arr.splice(1,1,2,4); console.log(arr); // [5, 2, 4, 4, 9, 11] console.log(arrRemoved3); //[7] // indexOf(), 接收兩個參數:要查找的項和(可選的)表示查找起點位置的索引,lastIndexOf(),從數組的末尾開始向前查找 var arr = [1,3,5,7,7,5,3,1]; console.log(arr.indexOf(5)); //2 console.log(arr.lastIndexOf(5)); //5 //forEach(), 對數組進行遍歷循環,對數組中的每一項運行給定函數。這個方法沒有返回值。參數都是function類型,默認有傳參,參數分別為:遍歷的數組內容;第對應的數組索引,數組本身。 var arr = [1, 2, 3, 4, 5]; arr.forEach(function(x, index, a){ console.log(x + ‘|‘ + index + ‘|‘ + (a === arr)); }); // 輸出為: // 1|0|true // 2|1|true // 3|2|true // 4|3|true // 5|4|true //map(), 指“映射”,對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組 var arr = [1, 2, 3, 4, 5]; var arr2 = arr.map(function(item){ return item*item; }); console.log(arr2); //[1, 4, 9, 16, 25] //filter(), “過濾”功能,數組中的每一項運行給定函數,返回滿足過濾條件組成的數組 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var arr2 = arr.filter(function(x, index) { return index % 3 === 0 || x >= 8; }); console.log(arr2); //[1, 4, 7, 8, 9, 10] //every(), 判斷數組中每一項都是否滿足條件,只有所有項都滿足條件,才會返回true var arr = [1, 2, 3, 4, 5]; var arr2 = arr.every(function(x) { return x < 10; }); console.log(arr2); //true var arr3 = arr.every(function(x) { return x < 3; }); console.log(arr3); // false //some(), 判斷數組中是否存在滿足條件的項,只要有一項滿足條件,就會返回true var arr = [1, 2, 3, 4, 5]; var arr2 = arr.some(function(x) { return x < 3; }); console.log(arr2); //true var arr3 = arr.some(function(x) { return x < 1; }); console.log(arr3); // false //reduce()和 reduceRight(),這兩個方法都會實現叠代數組的所有項,然後構建一個最終返回的值。reduce()方法從數組的第一項開始,逐個遍歷到最後。而 reduceRight()則從數組的最後一項開始,向前遍歷到第一項。 var values = [1,2,3,4,5]; var sum = values.reduceRight(function(prev, cur, index, array){ return prev + cur; },10); console.log(sum); //25 <script>
JS學習小結(上)