看完這篇文章,你將瞭解:
一、數組到底是什麼?
如圖:
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){ ? } ):
2.實例
四、Array.sort函數
a.sort( function(x, y){ ? } ):
2. 實例
結合哈希表實現一例高級排序
五、Array.join函數
a.join(字元串):將數組內各元素通過參數連接,返回一個字元串
六、Array.concat函數
a.concat(b):a是數組,b也是數組,可以把兩個數組合併而不影響彼此
a.concat( )也可用於拷貝數組
七、Array.map函數
map語法上與forEach一致,簡單理解,就是一個增加了返回值的forEach
map中文譯為「映射」,因為它可以將一個數組映射為另一個數組,甚至是對象
八、Array.filter函數
a.filter( function(value, key){ ? } ):
九、Array.reduce函數
這個函數有點複雜,舉一個例子說明
可以看到,reduce的作用就是:給一個暫存器,一個元素變數,一個初始值。從初始值開始,一個一個元素訪問,return每次計算的值更新暫存器,繼續參與下次運算。
註:想像火車上有一個劫匪,背著麻袋,挨個車廂要東西。這個麻袋就是暫存器,各節車廂就是數組的各個元素,每次經過一節車廂,麻袋的內容都會變化,負責把東西裝進去的,就是return
reduce方法十分強大,map和filter可以做的事,它也可以:
十、其他知識
1.js的構造函數
js構造函數,按簡單類型和對象類型可以分為兩類。對象類型根據構造函數參數的不同,又有數組和函數兩種特殊情況
2.var 是一個表達式
無論跟著什麼,都會有返回值undefined
3.沒有返回語句的函數,默認返回undefined
你沒寫的話,它會在最後幫你加上「return undefined」
知道了這一點,就可以解釋console.log( )執行列印後,為什麼總是(= =)跟著一個undefined
4.匿名函數的簡寫
匿名函數都可以用 => 簡寫
用途:本文介紹的Array對象各種api(sort,map,filter,reduce),頻繁使用匿名函數作為參數。將這些函數簡寫,可使代碼更簡潔。
5.「鏈式」簡寫
以上介紹的各種數組api,可以通過「鏈式」調用組合到一起,完成各種需求。