?? Array(數組)是JavaScript中較為復雜的數據類型,同Java、C#、VB等程序語言的數組相比,Javascript數組中的元素不必為相同的數據類型,可以在數組每個元素上混合使用數字、日期、字符串、Object,甚至添加一個嵌套數組。
## 一、創建數組
?? 1、var arr1 = new Array(); /var? arr2 = new Array(length); /var arr3 = new Array(element1,element2...);
var arr4 = [element1,element2,...];??? length是一個指定數組長度的整數。element是一系列任意值。
?? 2、變長數組:JavaScript的數組長度可以任意擴展。
~~~
var arr = new Array(2);
arr[0] = "Jan";
arr[1] = "Feb";
arr[2] = "Mar";
alert(arr.length); //輸出3
~~~
3、元素可以為空
~~~
var arr = new Array();
arr[0] = "Jan";
arr[2] = "Mar";
alert(arr.length); //輸出3
alert(arr[1]); //undefined
~~~
但是document.write(arr);將輸出:Jan,,Mar
4、使用Array()時的注意事項:不能將另外一個數組作為參數傳遞給該函數,否則是創建了一個僅有一個元素的復合數組
~~~
var arr1 = ['a','b','c'];
var arr2 = new Array(arr1);
document.write(arr2+"<br/>");
document.write(arr2[0]+"<br/>");
document.write(arr2[1]+"<br/>");
document.write(arr2[0] === arr1);
~~~
結果:

但是使用Object()則不然,它創建了一個對象的副本。
~~~
var obj = {a:1,b:2,c:3};
var obj2 = new Object(obj);
document.write(obj2+"<br/>");
document.write(obj2.a+"<br/>");
document.write(obj === obj2);
~~~
結果:

## 二、實現和使用多維數組
?? 在Javascript中不可以直接聲明多維數組,但是可以將數組嵌套實現多維數組。
~~~
var multiArr = new Array(new Array("one","two"),new Array(1,2));
document.write(multiArr+"<br/>");
document.write(multiArr[0]+"<br/>");
document.write(multiArr[1][0]+"<br/>");
document.write("循環輸出數組元素:<br/>");
for(var i = 0; i < multiArr.length; i++)
{
for(var j = 0; j < multiArr[i].length;j++)
{
document.write(multiArr[i][j]+"<br/>");
}
}
~~~
結果:

## 三、使用Array API處理數組
?? 1、Array類的常見方法和屬性:


?? 2、Array類的靜態屬性:
CASEINSENSITIVE :在排序中,此常數指定不區分大小寫。
DESCENDING:在排序中,此常數指定降序排序。
NUMERIC:在排序中,此常數指定數字(不是字符串)排序。
RETURNINDEXEDARRAY:指定排序返回索引
UNIQUESORT:在排序方法中,此常數指定唯一的排序要求。
3、示例
~~~
var arr = new Array("Jody");
document.write("原數組:"+arr+"<br/>");
arr.push("Mary"); //新增一個元素
document.write("新增一個元素:"+arr.toString()+"<br/>");
arr.push("Marcell");
document.write(arr.toString()+"<br/>");
arr.shift(); //刪除第一個元素
document.write("刪除第一個元素:"+arr.toString()+"<br/>");
arr.reverse(); //反轉元素
document.write("反轉元素:"+arr.toString()+"<br/>");
var arr1 = ["Judy","Jody"];
var arr3 = arr1.concat(arr); //兩個數組相連創建一個新數組
document.write("兩個數組相連創建一個新數組:"+arr3.toString()+"<br/>");
document.write("join()方法:"+arr3.join("-")+"<br/>");
var arr4 = arr3.slice(0,2);
document.write("slice()方法返回子數組:"+arr4.join("-")+"<br/>");
document.write("splice()方法刪除元素:"+arr3.splice(0,2)+"<br/>");
~~~
結果:

## 四:ECMAScript 5 新增的方法(在IE中,只有IE9支持)
?? 1、every(callbackFunction[,thisObject]):對數組的每一項執行測試函數,直到獲得對指定的函數返回false的項。
callbackFunction為定義的函數名,該函數有元素值、元素索引和Array對象三個參數;thisObject可選,是函數的this對象。
?? 2、filter(callbackFunction[,thisObject]):對數組的每一項執行測試函數,根據函數結果構造一個新數組。所有數組元素對指定函數返回TRUE,則新數組中包含此元素,反之,不包含。
?? 3、forEach(callbackFunction[,thisObject]):對數組中的每一項執行回調函數。參數同every()函數。
4、indexOf(seachElement[,fromIndex]):使用“===”運算符搜索數組中的項,并返回該值索引位置。seachElement是查找項,若沒有找到則返回-1;fromIndex是查找的起始位置。
5、Array.isArray(objArr):靜態方法,判斷指定的參數是否為數組。
6、lastIndexOf(seachElement[,fromIndex]):使用“===”運算符搜索數組中的項(從最后一項向前搜索),并返回該值索引位置。語法同indexOf()方法。
? ?7、map(callbackFunction[,thisObject]):對數組的每一項執行測試函數,根據函數結果構造一個新數組,其中包含與原始數組中的每一項的函數結果對應的項。參數語義同every()函數。
? 8、reduce(callbackFunction[,initialValue]):從左到右,使用函數比較數組中的兩個值,將兩個值刪除一個。callbackFunction是自定義的函數,包含前一個元素值、當前元素值、當前元素索引和Array對象。initialValue是第一次調用callbackFunction函數時的previous值(前一個元素值)。若不定義,第一次調用callbackFunction時前一個元素值是第一個元素值,當前值是第二個元素值;若定義了,則當前值是第一個元素值。
? 9、refuceRight(callbackFunction[,initialValue]):從右到左,使用函數比較數組中的兩個值,將兩個值刪除一個。參數語義同reduce()。
? 10、some(callbackFunction[,thisObject]):對數組中的每一項執行測試函數,直到返回true的項。
## 五、數組的排序:
? ?sort([sortfunction]):用于對數組進行排序,sortfunction可選,用來定義數組元素排序的函數,若省略,元素按照ASCII字符順序進行升序排列,意味著不能對中文排序。
? 1、默認的排序規則
? ? ? 1.1 ? 排序區分大小寫,大寫優先于小寫(Z優先于a)
? ? ? 1.2 ? ?按升序排序(a優先于b)
? ? ? 1.3 ? ?數字字段按字符串形式排序,所以100優先于99,因為1的字符串值比9低。
?2、自定義排序:定義sortfunction參數
? ? ? 2.1 ?函數返回 -1表示傳遞的第一個參數比第二個參數小
? ? ? 2.2 ??函數返回 0表示傳遞的第一個參數等于第二個參數
? ? ? 2.3 ??函數返回 1表示傳遞的第一個參數比第二個參數大
~~~
var arr = new Array("Tom","Tommy","John");
//按照ASCII順序升序排列
arr.sort();
document.write("按照ASCII順序升序排列:"+arr+"<br/>");
var sortFun = function(a,b)
{
if(a.length < b.length) return -1;
if(a.length > b.length) return 1;
if(a.length == b.length) return 0;
}
arr.sort(sortFun);
document.write("按照自定義順序排列:"+arr+"<br/>");
~~~
結果:

## 六、創建和使用復合數組:在Javascript中可以使用Object和Array對象創建復合數組
? 1、使用Object對象創建
? ? ? ? var per = {sex:"male",age:28,birth:new Date(1980,7,5)};
? ? ? ? document.write(per.sex) <=>?document.write(per['sex']) ;//類似于創建Javascript對象
? 2、使用Array對象創建
? ? ? ? var per = new Array();
? ? ? ? per['sex'] = "male"; ? per['age'] = 28; ?per['birth'] = new Date(1980,7,5);
? ? ? ?以下方法則是錯誤的:
? ? ? ?var per = [sex:"male",age:28,birth:new Date(1980,7,5)];
? ??
? ?3、遍歷復合數組
~~~
var per = new Array();
per['sex'] = "male";
per['age'] = 28;
per['birth'] = new Date(1980,7,5);
for(var i in per)
{
document.write(i+" : "+per[i]+"<br/>");
}
~~~
結果:

- 前言
- 一
- 二:變量
- 三:數據運算
- 四:流程控制
- 五:內建的全局函數
- 六:自定義函數
- 七:面向對象編程(OOP)
- 八:靜態成員、靜態類、枚舉、重載和覆蓋
- 九:原型鏈本質論
- 十:ECMAScript 5 增強的對象模型
- 十一:處理字符串---String類和正則表達式
- 十二:數組、多維數組和符合數組(哈希映射)
- 十三:處理日期和時間
- 十四:JavaScript內建類
- 十五:BOM之源---window對象
- 十六:BOM之源---BOM基本應用
- 十七:BOM新成就(1)--客戶端存儲數據(Storage實現)
- 十八:BOM新成就(1)--客戶端存儲數據(Web SQL DataBase實現)
- 十九--HTML5 DOM新標準---處理文檔元信息和管理交互能力
- 二十---XMLHttpRequest和AJAX解決方案