--概述
JS的數組和PHP相似,都是不定長,不限制數據類型的(數組的成員可以是不同的數據類型)。
JS中,只要是批量的數據,都使用數組存儲。
JS的數組都是通過數組序號訪問的(類似於PHP中的索引數組),序號從0開始。
數組的作用
批量的處理數據。
數組的聲明
--快速聲明方式
- 1維數組
var 數組名 = [成員1,成員2,成員3,......];
例如:
- var names = ["張三","李四","王五"];
- 聲明數組的數組(2維數組)
例如:
- var arg = [
- ["aa","bb"],
- ["11","22"],
- ["33","dd"]
- ]; //聲明瞭1個2維數組arg,裏面包含3個元素,每個元素都是數組
如果要輸出"22",使用arg[1][1];
--使用Array對象聲明數組
- 創建特定值的數組
var 數組名 = new Array("成員1","成員2",....)
- 創建空數組
var 數組名 = new Array(成員個數)
使用這個能創建個數等於成員個數的空數組。
數組的有用屬性
--length屬性
返回一個整數值,這個整數比數組中所定義的最高位元素的下標大 1。
說明:
因爲一個數組中的元素並不一定是連續的,所以 length 屬性也並不一定就等於數組中的元素個數。例如,在下面的數組定義中,my_array.length 中就包含 7,而不是 2:
- var my_array = new Array( );
- my_array[0] = "Test";
- my_array[6] = "Another Test";
如果 length 屬性被賦予了一個比原先值小的數值,那麼數組就被截斷,所有數組下標等於或者大於 length 屬性的新值的元素都會被丟失。
如果 length 屬性被賦予了一個比原先值大的數值,那麼數組就被擴展,且所有新建元素都被賦值爲 undefined。
數組的操作
不管用哪種方式聲明的數組,它都是一個對象,可以用數組對象的方法來處理。
--打印數組
打印函數中直接使用數組名就可以打印整個數組。
例如:
- var arr = [2,3,4,5];
- document.write(arr); //就打印出了2,3,4,5
--sort方法
arrayobj.sort(sortfunction)
返回一個元素已經進行了排序的 Array 對象。
參數
arrayObj:必選項。任意 Array 對象。
sortFunction:可選項。是用來確定元素順序的函數的名稱。如果這個參數被省略,那麼元素將按照 ASCII 字符順序進行升序排列。
說明
sort 方法將 Array 對象進行適當的排序;在執行過程中並不會創建新的 Array 對象。
如果爲 sortfunction 參數提供了一個函數,那麼該函數必須返回下列值之一:
- 負值,如果所傳遞的第一個參數比第二個參數小。
- 零,如果兩個參數相等。
- 正值,如果第一個參數比第二個參數大。
--關於數組堆棧
由於JS是弱類型語言,所以JS的數組可以模擬堆棧。
push,pop方法中,數組末尾被認爲是棧頂。
unshift,shift方法中,數組頭部認爲是棧頂。
--push方法
arrayObj.push([item1 [item2 [. . . [itemN ]]]])
將新元素添加到一個數組末尾,並返回數組的新長度值。
參數:
- arrayObj:必選項。一個 Array 對象。
- item, item2,. . . itemN:可選項。該 Array 的新元素。
push 方法將以新元素出現的順序添加這些元素。如果參數之一爲數組,那麼該數組將作爲單個元素添加到數組中。
--pop方法
arrayObj.pop( )
移除數組中的最後一個元素並返回該元素。
參數:
arrayObj:必選的。 arrayObj 引用是一個 Array 對象。
說明:
如果該數組爲空,那麼將返回 undefined。
--unshift方法
arrayObj.unshift([item1[, item2 [, . . . [, itemN]]]])
將指定的元素插入數組開始位置並返回該數組。
參數:
arrayObj:必選項。一個 Array 對象。
item1, item2,. . .,itemN:可選項。將插入到該 Array 開始部分的元素。
說明:
unshift 方法將這些元素插入到一個數組的開始部分,所以這些元素將以參數序列中的次序出現在數組中。
--shift方法
arrayObj.shift( )
移除數組中的第一個元素並返回該元素。
參數:
arrayObj:必選的。 arrayObj 引用是一個 Array 對象。
說明:
shift 方法可移除數組中的第一個元素並返回該元素。
--concat方法
array1.concat([item1[, item2[, . . . [, itemN]]]])
返回一個新數組,這個新數組是由兩個或更多數組組合而成的。
參數:
array1:必選項。其他所有數組要進行連接的 Array 對象。
item1,. . ., itemN:可選項。要連接到 array1 末尾的其他項目。
說明:
concat 方法返回一個 Array 對象,其中包含了 array1 和提供的任意其他項目的連接。
要加的項目(item1 … itemN)會按照從左到右的順序添加到數組。如果某一項爲數組,那麼添加其內容到 array1 的末尾。如果該項目不是數組,就將其作爲單個的數組元素添加到數組的末尾。
以下爲從源數組複製元素到結果數組:
- 如果一個對象引用被從 item1 或 item2 複製到結果中,那麼結果中的對象引用仍然指向同一個對象。對該對象的改變將同時反映在兩個數組中。
- 對於連接到新數組的數值或字符串,只複製其值。一個數組中值有改變並不影響另一個數組中的值。
- function ConcatArrayDemo(){
- var a, b, c, d;
- a = new Array(1,2,3);
- b = "JScript";
- c = new Array(42, "VBScript);
- d = a.concat(b, c);
- // 返回數組 [1, 2, 3, "JScript", 42, "VBScript"]
- return(d);
- }
--join方法
arrayObj.join(separator)
返回字符串值,其中包含了連接到一起的數組的所有元素,元素由指定的分隔符分隔開來。
參數:
arrayObj:必選項。Array 對象。
separator:必選項。是一個 String 對象,作爲最終的 String 對象中對數組元素之間的分隔符。如果省略了這個參數,那麼數組元素之間就用一個逗號來分隔。
說明:
如果數組中有元素沒有定義或者爲 null,將其作爲空字符串處理。
實例:
- function JoinDemo(){
- var a, b;
- a = new Array(0,1,2,3,4);
- b = a.join("-");
- return(b);
- } //b是個字符串,值是"0-1-2-3-4"
--reverse方法
arrayObj.reverse( )
反轉一個數組,
在執行過程中改變原數組,這個方法並不會創建一個新的 Array 對象。
--slice方法
arrayObj.slice(start, [end])
返回一個數組的一段。
參數:
arrayObj:必選項。一個 Array 對象。
start:必選項。arrayObj 中所指定的部分的開始元素是從零開始計算的下標。
end:可選項。arrayObj 中所指定的部分的結束元素是從零開始計算的下標。
說明
slice 方法返回一個 Array 對象,其中包含了 arrayObj 的指定部分。
slice 方法一直複製到 end 所指定的元素,但是不包括該元素。如果 start 爲負,將它作爲 length + start處理,此處 length 爲數組的長度。如果 end 爲負,就將它作爲 length + end 處理,此處 length 爲數組的長度。如果省略 end ,那麼 slice 方法將一直複製到 arrayObj 的結尾。如果 end 出現在 start 之前,不復制任何元素到新數組中。
實例:
- var a, b;
- a = new Array(0,1,2,3,4);
- b = a.slice(0,3); //b是a數組的從0到2,3個元素
- document.write(b); //將輸出0,1,2
start,end可以是負值,如果爲負值將被加上length。例如:
- var a, b;
- a = new Array(0,1,2,3,4);
- b = a.slice(0, -1); //從0開始,到5+(-1)=4之前(不包括4)
- document.write(b); //可以直接理解爲從0一直到最後1個之前