看完這篇文章,你將瞭解:

  1. js數組的本質
  2. 數組的構造函數
  3. 數組各種常用方法
  4. 其他小知識

一、數組到底是什麼?

  • js裏,數組就是一個對象,一個由Array構造出來的對象
  • 區分數組與偽數組(類似數組的對象)的方法是:看它的原型鏈是否指向Array.prototype,有沒有這一prototype提供的各種方法(push( ),pop( ),shift( ),join( ))

如圖:

a是數組,obj是偽數組

a是數組,是因為它指向Array的prototype,可push( ),可pop( )

obj不是數組,是因為它的原型鏈中沒有指向Array的prototype這一環

據此,我們有一個檢驗數組的簡單方法:

push in obj

好吧,嚴格講這個方法其實不嚴謹,因為萬一偽數組對象也有push屬性呢?

正式檢驗的話,應該用這個api:

Array.isArray(obj)

二、數組的構造函數

1.一個參數

2.兩個以上參數

由此可見,js裏數組的構造函數具有不一致性的特點。

所謂不一致性,就是指:在參數個數不同的情況下,同一位置的相同參數,具有不同含義。

比如:Array在一個參數的情況下,這個參數表示長度;有兩個以上參數時,這個參數又表示數組元素

三、Array.forEach函數

1.語法

a.forEach( function(value, key){ ? } ):

  • 它的參數是一個函數,此函數按value和key的順序傳參
  • 它的工作原理是:對a數組內每個元素,執行參數裏的方法 ?

2.實例

四、Array.sort函數

1.語法

a.sort( function(x, y){ ? } ):

  • 它的參數是一個二元函數
  • ?一般兩種寫法,return x-y表示正序,return y-x 表示逆序
  • 與哈希表結合,可以實現更豐富的排序

2. 實例

結合哈希表實現一例高級排序

五、Array.join函數

a.join(字元串):將數組內各元素通過參數連接,返回一個字元串

六、Array.concat函數

a.concat(b):a是數組,b也是數組,可以把兩個數組合併而不影響彼此

a.concat( )也可用於拷貝數組

註:內存不相同的特點是,b變a不變

七、Array.map函數

map語法上與forEach一致,簡單理解,就是一個增加了返回值的forEach

map中文譯為「映射」,因為它可以將一個數組映射為另一個數組,甚至是對象

八、Array.filter函數

1.語法

a.filter( function(value, key){ ? } ):

  • filter就是一個過濾器,內部函數必須返回一個Boolean值(以規定誰能過,誰不能過)。
  • 最後結果是判斷值為true的元素組成的數組

2.實例

九、Array.reduce函數

這個函數有點複雜,舉一個例子說明

可以看到,reduce的作用就是:給一個暫存器,一個元素變數,一個初始值。從初始值開始,一個一個元素訪問,return每次計算的值更新暫存器,繼續參與下次運算。

註:想像火車上有一個劫匪,背著麻袋,挨個車廂要東西。這個麻袋就是暫存器,各節車廂就是數組的各個元素,每次經過一節車廂,麻袋的內容都會變化,負責把東西裝進去的,就是return

reduce方法十分強大,map和filter可以做的事,它也可以:


十、其他知識

1.js的構造函數

js構造函數,按簡單類型和對象類型可以分為兩類。對象類型根據構造函數參數的不同,又有數組和函數兩種特殊情況

  • 簡單類型如Number,String,Boolean,不加new是轉換函數,加new是構造對象
  • 對象類型( 包括Array,Function ),加不加new都是構造對象
對象類型有沒有new沒區別,簡單類型有區別

  • Array構造函數:已經介紹,↑
  • Function構造函數:Function構造函數一般傳入多個參數。包括參數表與函數體(字元串)

2.var 是一個表達式

無論跟著什麼,都會有返回值undefined

3.沒有返回語句的函數,默認返回undefined

你沒寫的話,它會在最後幫你加上「return undefined」

知道了這一點,就可以解釋console.log( )執行列印後,為什麼總是(= =)跟著一個undefined

4.匿名函數的簡寫

匿名函數都可以用 => 簡寫

用途:本文介紹的Array對象各種api(sort,map,filter,reduce),頻繁使用匿名函數作為參數。將這些函數簡寫,可使代碼更簡潔。

5.「鏈式」簡寫

以上介紹的各種數組api,可以通過「鏈式」調用組合到一起,完成各種需求。


推薦閱讀:
相關文章