## 數(shù)組
**1.數(shù)組簡(jiǎn)介**
數(shù)組是值的有序集合。每個(gè)值叫做一個(gè)元素,而每個(gè)元素在數(shù)組中有一個(gè)位置,以數(shù)字表示(從0開(kāi)始),稱為索引,整個(gè)數(shù)組用方括號(hào)表示。
```
var arr = [1,2,3];
```
除了在定義時(shí)賦值,數(shù)組也可以先定義后賦值。
```
var arr = [];
arr[0] =1;
```
數(shù)組元素可以是任意類型。
```
var arr = [1,'a',{name:'a'},function(){}];
```
上面數(shù)組arr的4個(gè)元素分別是數(shù)字,字符串,對(duì)象,函數(shù)。
數(shù)組屬于一種特殊的對(duì)象。
```
typeof [1]
// "object"
```
JavaScript語(yǔ)言規(guī)定,對(duì)象的鍵名一律為字符串,所以,數(shù)組的鍵名其實(shí)也是字符串。之所以可以用數(shù)值讀取,是因?yàn)榉亲址逆I名會(huì)被轉(zhuǎn)為字符串。
**2、創(chuàng)建數(shù)組**
**2.1 創(chuàng)建數(shù)組**
**(1)數(shù)組直接量**
使用數(shù)組直接量是創(chuàng)建數(shù)組最簡(jiǎn)單的方法,在方括號(hào)中將數(shù)組元素用逗號(hào)隔開(kāi)即可。
```
var arr = [1,2,3];
```
注:如果省略數(shù)組直接量的某個(gè)值,省略的元素將被賦予undefined值。
**(2)new Array()**
我們也可以調(diào)用構(gòu)造函數(shù)Array()創(chuàng)建數(shù)組
```
var a=new Array();
var a2=new Array(10);
var a3=new Array(1,2,3,4);
```
上面的例子,a是一個(gè)空數(shù)組,a2是一個(gè)包含10個(gè)數(shù)組項(xiàng)但為undefined的數(shù)組,a3是包含4個(gè)數(shù)組項(xiàng),并且分別有值。
**2.2 數(shù)組長(zhǎng)度**
每個(gè)數(shù)組都有一個(gè)**length**屬性,返回?cái)?shù)組的元素?cái)?shù)量
```
[1,2,3].length //3
```
JavaScript使用一個(gè)32位整數(shù),保存數(shù)組的元素個(gè)數(shù)。這意味著,數(shù)組成員最多只有4294967295個(gè)(232 - 1)個(gè),也就是說(shuō)length屬性的最大值就是4294967295。
只要是數(shù)組,就一定有l(wèi)ength屬性。該屬性是一個(gè)動(dòng)態(tài)的值,等于鍵名中的最大整數(shù)加上1.
length屬性是可寫的。如果人為設(shè)置一個(gè)小于當(dāng)前成員個(gè)數(shù)的值,該數(shù)組的成員會(huì)自動(dòng)減少到length設(shè)置的值。
```
var arr = [1,2,3]
arr.length //3
arr.length = 2;
arr //[1,2]
```
將數(shù)組清空的一個(gè)有效方法,就是將length屬性設(shè)為0。
```
var arr = [1,2,3];
arr.length = 0;
arr //[]
```
如果人為設(shè)置length大于當(dāng)前元素個(gè)數(shù),則數(shù)組的成員數(shù)量會(huì)增加到這個(gè)值,新增的位置都是空位。
```
var arr = [1];
arr.length=3;
arr[1] //undefined
```
在ECMAScript 5中,可以用Object.defineProperty() 讓數(shù)組的length屬性變成只讀。
**2.3 空位**
當(dāng)數(shù)組的某個(gè)位置是空元素,即兩個(gè)逗號(hào)之間沒(méi)有任何值,我們稱該數(shù)組存在空位(hole)。
```
var arr = [1,,2]
arr.length //3
```
但是,如果最后一個(gè)元素后面有逗號(hào),并不會(huì)產(chǎn)生空位。數(shù)組直接量的語(yǔ)法允許有可選的結(jié)尾的逗號(hào),故[,,]只有兩個(gè)元素而非三個(gè)。
```
var arr = [,,];
arr.length //2
```
**2.4 數(shù)組元素的讀和寫**
使用([])操作符來(lái)訪問(wèn)數(shù)組中的一個(gè)元素。
```
var arr = [1,2]
arr[0] //1
arr[1]=3; // [1,3]
```
**2.5 數(shù)組元素的添加和刪除**
可以使用push()方法在數(shù)組末尾添加一個(gè)或多個(gè)元素。
```
var arr = [1,2]
arr.push(3) // [1,2,3]
arr.push('a','b') //[1,2,3,'a','b']
// shift()是刪除數(shù)組的一個(gè)元素。
arr.shift() // [2,3,'a','b']
```
**2.6 稀疏數(shù)組**
稀疏數(shù)組是指包含從0開(kāi)始的不連續(xù)索引的數(shù)組。通常,數(shù)組的length屬性值代表數(shù)組中元素的個(gè)數(shù),但如果是稀疏數(shù)組,length屬性值大于元素的個(gè)數(shù)。
**2.7 多維數(shù)組**
JavaScript不支持真正的多維數(shù)組,但可以用數(shù)組的數(shù)組來(lái)近似。也可以說(shuō),數(shù)組里放數(shù)組。
```
var arr = [[1],[2,3]];
arr[0][0] // 1
arr[1][1] //3
```
**2.8 遍歷數(shù)組**
我們可以使用for循環(huán)、while循環(huán)、for..in或者forEach()方法來(lái)遍歷數(shù)組
```
var a = [1, 2, 3];
// for循環(huán)
for(var i = 0; i < a.length; i++) {
console.log(a[i]);
}
//while
var i = 0;
while (i < a.length) {
console.log(a[i]);
i++;
}
//for..in
for (var i in a) {
console.log(a[i]);
}
//forEach
a.forEach(function(v){
console.log(v);
})
```
**2.9 類數(shù)組對(duì)象**
在JavaScript中,有些對(duì)象被稱為“類數(shù)組對(duì)象”。意思是,它們看上去很像數(shù)組,可以使用length屬性,但是它們并不是數(shù)組,無(wú)法使用一些數(shù)組的方法。
```
var o = {
0: 'a',
1: 'b',
length:2
}
o[0] // "a"
o[1] // "b"
o.length // 2
o.push('d') // TypeError: o.push is not a function
```
上面代碼中,變量o是一個(gè)對(duì)象,雖然使用的時(shí)候看上去跟數(shù)組很像,但是無(wú)法使用數(shù)組的方法。這就是類數(shù)組對(duì)象。
`類數(shù)組對(duì)象`有一個(gè)特征,就是具有l(wèi)ength屬性。換句話說(shuō),只要有l(wèi)ength屬性,就可以認(rèn)為這個(gè)對(duì)象類似于數(shù)組。但是,對(duì)象的length屬性不是動(dòng)態(tài)值,不會(huì)隨著成員的變化而變化。
由于類數(shù)組對(duì)象沒(méi)有繼承自Array.prototype,那就不能在它們上面直接調(diào)用數(shù)組方法。不過(guò)我們可以間接的使用Function.call方法調(diào)用。
```
var o = {
0: 'a',
1: 'b',
length:2
};
Array.prototype.slice.call(o) // ["a","b"]
```
典型的類似數(shù)組的對(duì)象是函數(shù)的arguments對(duì)象,以及大多數(shù)DOM元素集,還有字符串。
- 前言
- JavaScript簡(jiǎn)介
- 基本概念
- 語(yǔ)法
- 數(shù)據(jù)類型
- 運(yùn)算符
- 表達(dá)式
- 語(yǔ)句
- 對(duì)象
- 數(shù)組
- 函數(shù)
- 引用類型(對(duì)象)
- Object對(duì)象
- Array對(duì)象
- Date對(duì)象
- RegExp對(duì)象
- 基本包裝類型(Boolean、Number、String)
- 單體內(nèi)置對(duì)象(Global、Math)
- console對(duì)象
- DOM
- DOM-屬性和CSS
- BOM
- Event 事件
- 正則表達(dá)式
- JSON
- AJAX
- 表單和富文本編輯器
- 表單
- 富文本編輯器
- canvas
- 離線應(yīng)用
- 客戶端存儲(chǔ)(Cookie、Storage、IndexedDB)
- HTML5 API
- Video/Audio
- Geolocation API
- requestAnimationFrame
- File API
- FullScreen API
- IndexedDB
- 檢測(cè)設(shè)備方向
- Blob
- vibrate
- Luminosity API
- WebRTC
- Page Visibility API
- Performance API
- Web Speech
- Notification
- 面向?qū)ο蟮某绦蛟O(shè)計(jì)
- 概述
- this關(guān)鍵字
- 原型鏈
- 作用域
- 常用API合集
- SVG
- 錯(cuò)誤處理機(jī)制
- JavaScript開(kāi)發(fā)技巧合集
- 編程風(fēng)格
- 垃圾回收機(jī)制
