JavaScript學(xué)習(xí)筆記整理(5):數(shù)組

2018-06-19 11:58 更新
      數(shù)組是值的有序集合。每個(gè)值叫做一個(gè)元素,而每個(gè)元素在數(shù)組中有一個(gè)位置,以數(shù)字表示(從0開始),稱為索引,整個(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)為字符串。

創(chuàng)建數(shù)組
使用數(shù)組直接量是創(chuàng)建數(shù)組最簡(jiǎn)單的方法,在方括號(hào)中將數(shù)組元素用逗號(hào)隔開即可。

var arr = [1,2,3];

注:如果省略數(shù)組直接量的某個(gè)值,省略的元素將被賦予undefined值。

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);



數(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è),也就是說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屬性變成只讀。

空位 當(dāng)數(shù)組的某個(gè)位置是空元素,即兩個(gè)逗號(hào)之間沒有任何值,我們稱該數(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

數(shù)組元素的讀和寫 使用([])操作符來(lái)訪問數(shù)組中的一個(gè)元素。

var arr = [1,2]


arr[0]  //1

arr[1]=3;  // [1,3]

數(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']

稀疏數(shù)組
稀疏數(shù)組是指包含從0開始的不連續(xù)索引的數(shù)組。通常,數(shù)組的length屬性值代表數(shù)組中元素的個(gè)數(shù),但如果是稀疏數(shù)組,length屬性值大于元素的個(gè)數(shù)。

多維數(shù)組
JavaScript不支持真正的多維數(shù)組,但可以用數(shù)組的數(shù)組來(lái)近似。也可以說,數(shù)組里放數(shù)組。

var arr = [[1],[2,3]];

arr[0][0]  // 1

arr[1][1]  //3


遍歷

我們可以使用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);

})


類數(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屬性。換句話說,只要有l(wèi)ength屬性,就可以認(rèn)為這個(gè)對(duì)象類似于數(shù)組。但是,對(duì)象的length屬性不是動(dòng)態(tài)值,不會(huì)隨著成員的變化而變化。


由于類數(shù)組對(duì)象沒有繼承自Array.prototype,那就不能在它們上面直接調(diào)用數(shù)組方法。不過我們可以間接的使用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元素集,還有字符串。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)