最近看了一下紅皮書,就整理一下,提煉一下里面的知識點!數組
建立方式函數
先從數組的建立方式提及,有兩種建立方式spa
能夠給構造函數傳參數,若是隻傳一個參數,而且這個參數是數值,那麼就建立該數值大小的數組,其餘狀況就是建立包含這些參數的數組code
數組的每一項都是能夠保存任何類型的數據的,var arr = [1,"hello",true,{a:1}];可是不推薦保存不一樣類型的值對象
length屬性blog
1.它的值永遠等於數組索引的最後一項+1排序
var arr = [1,2,3]; arr[9] = 10; console.log(arr.length);//10
2.用length屬性來達到push()函數的效果索引
var arr = [1,2,3]; arr[arr.length] = 4; console.log(arr);//[1, 2, 3, 4] arr.push(5); console.log(arr);//[1, 2, 3, 4, 5]
檢測方法隊列
可使用instanceof操做符和isArray()函數(ES5)字符串
console.log([] instanceof Array);//true console.log({} instanceof Array);//false console.log(3 instanceof Array);//false console.log(Array.isArray([1]));//true console.log(Array.isArray({}));//false
轉換方法
全部的對象都有toLocalString()、toString()和valueOf()方法
對於數組的toString()方法,當數組調用的這個方法的時候是在數組的每一項上調用這個方法使他們都變成字符串,而後再把它們拼接成用逗號隔開的字符串
調用valueOf()仍是返回原數組
棧方法和隊列方法
push()和pop()方法是LIFO(後進先出)
shift()和unshift()方法是FIFO(先進先出)
重排序方法
reverse()和sort()方法
先說簡單的reverse()方法
var arr = [1,2,3]; var newArr = arr.reverse(); console.log(arr);//[3, 2, 1] console.log(newArr);//[3, 2, 1]
它使數組的項倒序排列,它修改了原數組,而且返回值也是修改後的數組
sort()方法就比較麻煩了,在默認狀況下即不傳參時,是按升序排列數組的,爲實現排序,sort()方法會調用每一個數組項的toString()方法,而後比較獲得的字符串,再來肯定如何排序,即便每一項都是數值,也要先轉換成字符串。
var arr = [1,5,12,24,3,2]; arr.sort(); console.log(arr);//[1, 12, 2, 24, 3, 5]
1,12,2,24,3,5這是什麼排大小的邏輯呀,怎麼不給我升序排列呀,這是由於它比較的是字符串,先從第一字符比起,而後再是第二個······
因而,能夠給這個方法傳遞一個比較函數,規則是這樣的:若是第一個參數應該位於第二個參數以前則返回一個負數;若是兩個參數相等,則返回;,若是第一個參數應該位於第二個以後則返回一個正數。
var arr = [1,5,12,24,3,2]; function compare(a,b) { if(a > b) { return 1; } else if( a < b) { return -1; } else { return 0; } } arr.sort(compare); console.log(arr);//[1, 2, 3, 5, 12, 24]
此次就行了,對於比較的只是數值類型(注意是數值是前提)比較函數還能夠這樣寫
function compare(a,b) { return a - b; }
這個形式就簡單多了!
操做方法
concat()方法用於拼接數組,具體說就是先建立當前數組的一個副本,而後將接受到的參數添加到這個副本的末尾,最後返回新構建的數組
var arr = [1,2]; var arr2 = arr.concat(3,4,[5,6]); console.log(arr);//[1, 2] console.log(arr2);//[1, 2, 3, 4, 5, 6]
slice()方法用於截取數組,可接受一個或者是兩個參數,即起始位置和結束位置,在只有一個參數時,slice()返回從該參數指定位置開始到當前數組末尾的全部項。若是是
兩個參數,則返回起始位置和結束位置(可是不包括結束位置)之間的數組項;
var arr = [1,2,3,4,5,6]; var arr2 = arr.slice(0,1); var arr3 = arr.slice(1); var arr4 = arr.slice(2,5); var arr5 = arr.slice(2,6); var arr6 = arr.slice(-4,-1);//等價於arr.slice(2,5) var arr7 = arr.slice(5,2); console.log(arr);//[1, 2, 3, 4, 5, 6] console.log(arr2);//[1] console.log(arr3);//[2,3,4,5,6] console.log(arr4);//[3,4,5] console.log(arr5);//[3,4,5,6] console.log(arr6);//[3,4,5] console.log(arr7);//[]
能夠看出不包括結束位置的項,而且容許slice方法的參數是負值,若是是負值則用數組的長度加上該負數來肯定相應的位置,還有就是若是結束位置小於起始位置就返回空數組
splice()方法雖然與slice()只有一個字母之差,可是它實現的功能不少,它能對數組實現三項功能:1.刪除,2.插入,3.替換
刪除:須要指定兩個參數:要刪除的第一項的位置和要刪除的項數
var arr = [1,2,3,4,5,6]; var arr2 = arr.splice(2,3); console.log(arr);//[1,2,6] console.log(arr2);//[3,4,5]
插入:能夠向指定的位置插入任意數量的項,須要提供3個參數:起始位置,0,要插入的項;若是要插入多個項,能夠再傳入第四個,第五個參數
var arr = [1,2,3,4,5,6]; var arr2 = arr.splice(2,0,7,8); console.log(arr);//[1, 2, 7, 8, 3, 4, 5, 6] console.log(arr2);//[]
替換:能夠向指定位置替換任意項,需提供三個參數,起始位置,要刪除的項數和要插入的任意數量的項,插入的項數沒必要與刪除的項數相等。
var arr = [1,2,3,4,5,6]; var arr2 = arr.splice(2,1,7,8); console.log(arr);//[1, 2, 7, 8, 4, 5, 6] console.log(arr2);//[3]
splice始終都會返回一個數組,該數組中包含從原始數組中刪除的項,若是沒有刪除就返回空數組
位置方法
ES5中新添加的兩個方法:indexOf()和lastIndexOf(),都接受兩個參數:一個是要查找的項,和可選的表示查找的起點位置的索引,這兩個方法的區別就是:indexOf()是從數組的開始查找,lastIndexOf()是從數組的末尾開始查找,它們都返回要查找項在數組的位置,若是沒有找到的話就返回-1,而且在查找過程當中是使用的全等操做符,還有就是他只能找到一個,若是數組中有多個相同的項要找,它只能找到第一個先發現的項
var arr = [1,2,3,4,5,6,6,3,2]; console.log(arr.indexOf(3));//2 console.log(arr.lastIndexOf(6));//6 console.log(arr.indexOf(3,3));//7 console.log(arr.lastIndexOf(2,3));//1
下次介紹迭代方法和歸併方法