- 建立數組
(1)建構函式法
使用Array()建構函式可以建立一個數組。
var a = new Array(); //建立一個新數組var b = new Array(10); //建立長度為10的空數組,10並非是數組元素個數的上限
(2)字面量標記法
使用方括弧建立數組,數組元素用逗號隔開。
var color = ["blue","red","yellow"];var count = [1,,3]; //數組有3個元素,中間的元素為undefinedvar undefs = [,,,]; //不要這樣寫,會被當做3或者4個元素,視瀏覽器而定
上述數組count中間的元素若顯式的定義為undefined,情況略有不同
雖然二者的數組長度都是3,但是前者是個稀疏數組,元素個數只有2,後者是稠密數組,元素個數為3。
- 數組長度
數組有一個length屬性,一般情況下,length屬性值等於數組元素的個數。當數組是稀疏數組時length值大於數組元素個數
數組長度是動態,因此可以通過改變length屬性值來增刪數組元素
當然數組既然是對象,也就繼承了對象的方法,我們可以通過Object.defineProperty()讓數組的length屬性變成唯讀
var a = [1,2,3];Object.defineProperty(a, "length", {writable:false});a.length = 0; //該操作無效
- 數組元素的添加和刪除
添加數組元素最簡單的方法是為新索引賦值
var a = []; //開始是一個空數組a[0] = "zero"; //向其中添加元素a[1] = "one";
也可以使用push()方法在數組末尾添加一個或者多個元素
var a = []; //開始建立一個空數組a.push("zero"); //在末尾添加一個元素,a=["zero"],方法返回1a.push("one","two"); //再添加兩個元素,a = ["zero","one","two"],方法返回3
該方法返回的新數組的長度。
要想在數組首部插入一個元素可以使用unshift()方法,同樣也是返回新數組的長度
刪除數組元素可以用以上的length屬性,也可以像刪除對象屬性一樣使用delete運算子來刪除數組元素
var a = [1,2,3];delete a[1]; //a在索引1的位置不再有元素1 in a //falsea.length //3
可以看出,delete不會修改數組的length屬性
刪除數組元素還可以使用數組的pop()方法和shift()方法。pop()方法一次刪除數組末尾的最後一個元素,方法返回被刪除的元素;shift()方法則是在數組首部刪除元素,同樣方法本身返回被刪除的元素。與delete不同是,delete其他元素的索引位置不變,即形成稀疏數組,而pop()和shift()方法數組的相應元素索引自動減1.,即恢複稠密數組。
最後,splice()是一個通用的方法來插入,刪除和替換數組元素,該方法改變原數組,返回的是移除的元素。新數組仍然是稠密數組
- ES3數組方法
4.1 join()
將數組中所有元素都轉換為字串串連在一起,可以傳入一個參數作為分隔字元,如果沒有參數則預設以逗號分隔。該方法並不改變原數組
Array.join()方法是String.split()方法的逆向操作
4.2 reverse()
將數組中的元素顛倒順序,改變原數組,方法返回新數組。
4.3 sort()
將數組中的元素排序。改變原數組,並返回新數組。若數組包含undefined元素,它們會排在數組尾部
sort()排序方式是按字母表順序排序的,若想按數值大小排序,可以傳入一個比較函數
4.4 concat()
建立並返回一個新數組,不會改變原來的數組。
var a = [1,2,3];a.concat(4,5); //返回[1,2,3,4,5]a.concat([4,5]); //返回[1,2,3,4,5]a.concat([4,5],[6,7]); //返回[1,2,3,4,5,6,7]a.concat(4,[5.[6,7]]); //返回[1,2,3,4,5,[6,7]]
4.5 slice()
返回指定數組的一個片段或子數組,兩個參數分別為開始和結束位置,但不包含結束位置。不會改變原數組
4.6 splice()
該方法第一個參數指定起始位置,第二個參數為從數組中刪除的個數,若省略則從起始一直刪除到末尾,後面的其他參數是要插入的元素。改變原數組,返回被刪除的元素組成的數組,若沒有刪除元素,則返回空數組。
4.7 push()和pop()
4.8 unshift()和shift()
4.9 toString()和toLocaleString()
- ES5數組方法
5.1 forEach()
遍曆數組,為每個數組調用指定的函數,傳遞的函數作為第一個參數,然後forEach()使用3個參數調用該函數:數組元素,元素的索引和數組本身
5.2 map()
將調用的數組的每個元素傳遞給指定的函數,並返回一個數組,它包含該數組的傳回值。
5.3 filter()
返回的數組元素師調用數組的一個子集。傳遞的函數是用來判定的,該函數返回true或false。
5.4 every()和some()
every()和some()方法是數組的·邏輯判定,它們對數組元素應用指定的函數進行判定,返回true或false
5.5 reduce()和reduceRight()
5.6 indexOf()和lastIndexOf()
搜素整個數組中具有給定值的元素,返回找到的第一個元素的索引,若沒有該元素返回-1。
- 數群組類型
我們可以使用typeof操作符來方便的識別基本類型資料,但卻不能用來區分數組和非數組對象,因為他們都會返回“對象”,在ES5中,我們可以使用Array.instanceof操作符來完成這個工作,