我們不要去糾結神馬是內建對象,神馬是內建構造器。到後來你們便會發現其實她們都是對象。 Array()是一個構建數組的內建構造器函數: 與下麵的是等效的: 無論數組是以神馬方式創建的,我們都可以照常向裡面添加元素。 當我們使用構造器函數Array()創建數組時,也可以通過傳值的方式為其添加元素: 如果 ...
我們不要去糾結神馬是內建對象,神馬是內建構造器。到後來你們便會發現其實她們都是對象。
Array()是一個構建數組的內建構造器函數:
var arr = new Array();
與下麵的是等效的:
var arr = []; //數組文本表識法
無論數組是以神馬方式創建的,我們都可以照常向裡面添加元素。
arr[0] = 1; arr[1] = 2; console.log(arr) // [1, 2]
當我們使用構造器函數Array()創建數組時,也可以通過傳值的方式為其添加元素:
var arr = new Array(1,2,3,true); console.log(arr); // [1,2,3,true]
如果我們向構造器函數傳遞單個數字,她就會出現一個異常情況:
var arr = new Array(5); console.log(arr); // [undefinedX5]
既然數組是有構造函數創建出來的,那她是不是一個對象呢,答案是肯定的!yes那就是一個對象!!!我們可以驗證一下:
console.log(typeof arr); // Object
既然它是一個對象,那麼他就繼承了Object的所有屬性和方法。
例如:constructor, prototype等等等等。。。。
當然數組還是有一些獨特之處的:
1. 數組的屬性名是從0開始遞增,並自動生成數值。
2. 數組擁有一個記錄元素數量的length屬性。
3. 數組在其父級對象的基礎上創建了許多額外的內建方法。
我們來驗證一下數組與對象的區別:
首先定義數組的時候會自動生成length屬性,而一般對象是沒有length屬性的。
var a = [], b = {}; a.length; // 0 b.length // undefined
在為數組和對象添加以數字或非數字為鍵明的屬性操作上兩者沒有神馬區別:
a[0] = 1; b[0] = 1; a.child = 2; b.child = 2;
length屬性會隨著數字鍵名的數量而更新,而忽略非數字鍵名。
我們也可以手動設置數組length屬性,如果設置的數字大於數組元素的數量,剩餘的部分會被空(undefined)所填充,相反如果設置的length屬性小於當前數組元素的數量那麼超出的元素會被自動刪除。
數組的內建方法:
concat() 方法:
concat() 方法用於連接兩個或多個數組。該方法不會改變現有的數組,而僅僅會返回被連接數組的一個副本。
var a = [1,2,3]; document.write(a.concat(4,5)); // [1,2,3,4,5]
var arr = new Array(3) arr[0] = "1" arr[1] = "2" arr[2] = "3" var arr2 = new Array(3) arr2[0] = "4" arr2[1] = "5" arr2[2] = "6" document.write(arr.concat(arr2)) // [1,2,3,4,5,6]
var arr = new Array(3) arr[0] = "1" arr[1] = "2" arr[2] = "3" var arr2 = new Array(3) arr2[0] = "4" arr2[1] = "5" arr2[2] = "6" var arr3 = new Array(2) arr3[0] = "7" arr3[1] = "8" console.log(arr.concat(arr2,arr3)); // [1,2,3,4,5,6,7,8]
join() 方法:
join() 方法用於把數組中的所有元素放入一個字元串。元素是通過指定的分隔符進行分隔的(預設為逗號,)。
var arr = new Array(3) arr[0] = "1" arr[1] = "2" arr[2] = "3" document.write(arr.join()); // '1,2,3'
var arr = new Array(3) arr[0] = "1" arr[1] = "2" arr[2] = "3" document.write(arr.join(".")); // '1.2.3'
push() 方法:
push() 方法可向數組的末尾添加一個或多個元素,並返回新的長度(註意是長度length,而不是返回新的數組)。
var arr = new Array(3) arr[0] = "1" arr[1] = "2" arr[2] = "3" console.log(arr.push(4)); // 4
pop() 方法:
pop() 方法用於刪除並返回數組的最後一個元素。
var arr = new Array(3) arr[0] = "1a" arr[1] = "2a" arr[2] = "3a" console.log(arr.pop()); // 3a
reverse() 方法:
reverse() 方法用於顛倒數組中元素的順序。
var arr = new Array(3) arr[0] = "1" arr[1] = "2" arr[2] = "3" console.log(arr.reverse()); // [3,2,1]
unshift() 方法:
unshift() 方法可向數組的開頭添加一個或更多元素,並返回新的長度。
var arr = new Array() arr[0] = "1" arr[1] = "2" arr[2] = "3" console.log(arr.unshift(4)); // [4,1,2,3]
shift() 方法:
shift() 方法用於把數組的第一個元素從其中刪除,並返回第一個元素的值。
var arr = new Array(3) arr[0] = "1" arr[1] = "2" arr[2] = "3" console.log(arr.shift()); // 1
slice() 方法:
slice() 方法可從已有的數組中返回選定的元素。
請註意,該方法並不會修改數組,而是返回一個子數組。如果想刪除數組中的一段元素,應該使用方法 Array.splice()。
var arr = new Array(3) arr[0] = "1" arr[1] = "2" arr[2] = "3" console.log(arr.slice(1)); // [2,3]
var arr = new Array(6) arr[0] = "1" arr[1] = "2" arr[2] = "3" arr[3] = "4" arr[4] = "5" arr[5] = "6" console.log(arr.slide(2,5)); // [3,4,5]
splice() 方法:
splice() 方法向/從數組中添加/刪除項目,然後返回被刪除的項目。
請註意,splice() 方法與 slice() 方法的作用是不同的,splice() 方法會直接對數組進行修改。
var arr = new Array(6) arr[0] = "1" arr[1] = "2" arr[2] = "3" arr[3] = "4" arr[4] = "5" arr[5] = "6" console.log(arr.split(2,0,111)); [1,2,111,4,5,6]
var arr = new Array(6) arr[0] = "1" arr[1] = "2" arr[2] = "3" arr[3] = "4" arr[4] = "5" arr[5] = "6" console.log(arr.split(2,3,888)); //[1,2,888,6]
sort() 方法:
sort() 方法用於對數組的元素進行排序。對數組的引用。請註意,數組在原數組上進行排序,不生成新的數組。
var arr = new Array(6) arr[0] = "10" arr[1] = "5" arr[2] = "40" arr[3] = "25" arr[4] = "1000" arr[5] = "1" console.log(arr); // [1,10,1000,25,40,5]
上面的代碼沒有按照數值的大小對數字進行排序,要實現這一點,就必須使用一個排序函數:
function sortNumber(a,b){ return a - b; } var arr = new Array(6) arr[0] = "10" arr[1] = "5" arr[2] = "40" arr[3] = "25" arr[4] = "1000" arr[5] = "1" console.log(arr.sort(sortNumber)); //[1,5,10,25,40,1000]