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

2018-06-19 11:58 更新
      數(shù)組是值的有序集合。每個值叫做一個元素,而每個元素在數(shù)組中有一個位置,以數(shù)字表示(從0開始),稱為索引,整個數(shù)組用方括號表示。

var  arr = [1,2,3];

除了在定義時賦值,數(shù)組也可以先定義后賦值。

var arr = [];

arr[0] =1;

數(shù)組元素可以是任意類型。

var arr = [1,'a',{name:'a'},function(){}];

上面數(shù)組arr的4個元素分別是數(shù)字,字符串,對象,函數(shù)。
數(shù)組屬于一種特殊的對象。

typeof [1]  

// "object"

JavaScript語言規(guī)定,對象的鍵名一律為字符串,所以,數(shù)組的鍵名其實也是字符串。之所以可以用數(shù)值讀取,是因為非字符串的鍵名會被轉(zhuǎn)為字符串。

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

var arr = [1,2,3];

注:如果省略數(shù)組直接量的某個值,省略的元素將被賦予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ù)組長度 每個數(shù)組都有一個length屬性,返回數(shù)組的元素數(shù)量

[1,2,3].length  //3

JavaScript使用一個32位整數(shù),保存數(shù)組的元素個數(shù)。這意味著,數(shù)組成員最多只有4294967295個(232 - 1)個,也就是說length屬性的最大值就是4294967295。

只要是數(shù)組,就一定有l(wèi)ength屬性。該屬性是一個動態(tài)的值,等于鍵名中的最大整數(shù)加上1.

length屬性是可寫的。如果人為設(shè)置一個小于當(dāng)前成員個數(shù)的值,該數(shù)組的成員會自動減少到length設(shè)置的值。

var arr = [1,2,3]

arr.length  //3


arr.length = 2;

arr //[1,2]

將數(shù)組清空的一個有效方法,就是將length屬性設(shè)為0。

var arr = [1,2,3];

arr.length = 0;

arr  //[]

如果人為設(shè)置length大于當(dāng)前元素個數(shù),則數(shù)組的成員數(shù)量會增加到這個值,新增的位置都是空位。

var arr = [1];

arr.length=3;

arr[1]  //undefined

在ECMAScript 5中,可以用Object.defineProperty() 讓數(shù)組的length屬性變成只讀。

空位 當(dāng)數(shù)組的某個位置是空元素,即兩個逗號之間沒有任何值,我們稱該數(shù)組存在空位(hole)。

var arr = [1,,2]

arr.length  //3


但是,如果最后一個元素后面有逗號,并不會產(chǎn)生空位。數(shù)組直接量的語法允許有可選的結(jié)尾的逗號,故[,,]只有兩個元素而非三個。

var arr = [,,];

arr.length  //2

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

var arr = [1,2]


arr[0]  //1

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

數(shù)組元素的添加和刪除
可以使用push()方法在數(shù)組末尾添加一個或多個元素。

var arr = [1,2]

arr.push(3)  // [1,2,3]

arr.push('a','b') //[1,2,3,'a','b']


// shift()是刪除數(shù)組的一個元素。 

arr.shift()   // [2,3,'a','b']

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

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

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

arr[0][0]  // 1

arr[1][1]  //3


遍歷

我們可以使用for循環(huán)、while循環(huán)、for..in或者forEach()方法來遍歷數(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ù)組對象

在JavaScript中,有些對象被稱為“類數(shù)組對象”。意思是,它們看上去很像數(shù)組,可以使用length屬性,但是它們并不是數(shù)組,無法使用一些數(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是一個對象,雖然使用的時候看上去跟數(shù)組很像,但是無法使用數(shù)組的方法。這就是類數(shù)組對象。 


類數(shù)組對象有一個特征,就是具有l(wèi)ength屬性。換句話說,只要有l(wèi)ength屬性,就可以認為這個對象類似于數(shù)組。但是,對象的length屬性不是動態(tài)值,不會隨著成員的變化而變化。


由于類數(shù)組對象沒有繼承自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ù)組的對象是函數(shù)的arguments對象,以及大多數(shù)DOM元素集,還有字符串。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號