js數組與常用方法 看完這篇文章,你將瞭解: js數組的本質 數組的構造函數 數組各種常用方法 其他小知識 一、數組到底是什麼? 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,可以通過「鏈式」調用組合到一起,完成各種需求。 推薦閱讀: 相關文章 {{#data}} {{title}} {{/data}}