1. 程式人生 > >[JavaScript]JavaScript中的Array

[JavaScript]JavaScript中的Array

arr zh-cn _proto_ 因此 .com 代碼 註意 prot 印象

JavaScript中的Array

今天較全面地學習到了JS中的Array,也就是數組。寫博文一篇來總結一下學習和使用過程中關於Array中的一些誤區和常用API,加深一下印象。

關於Array最全面的API在此,MDN

阮一峰阮老師的Array教程

Array的定義

來自MDN的定義:

JavaScript的Array對象是用於構造數組的全局對象,數組是類似於列表的高階對象

來自阮一峰老師教程的定義:

數組(array)是按次序排列的一組值。每個值的位置都有編號(從0開始),整個數組用方括號表示。

首先,數組是 對象,其次,他 按次序排列

  • 數組與對象的區別

那麽數組和對象的區別在哪裏呢?

我們先來看一下這段代碼:

技術分享圖片

我們分別聲明了一個數組和對象,我們可以看到:arr === obj 的結果為false,而且他們對應的構造函數也不同。

技術分享圖片

數組arr的構造函數是Array,而obj對應的構造函數Object,這就是他們最本質的區別。

因此,我們也可以說,數組是一個擁有特殊原型鏈的對象。

Array的聲明

  • 直接聲明
var arr = [1,2,3]
arr //[1,2,3]

這樣我們就創建了一個length為3的數組。

  • 構造函數聲明
var arr = new Array(1,2,3)
arr //[1,2,3]

值得註意的是,當我們使用構造函數聲明一個數組時,應該註意,不同的參數,會導致它的行為不一致。

var arr = new Array(3)
arr //[empty × 3]

var arr = new Array(3,3)
arr //[3, 3]

因此,我們在聲明一個數組時,不建議使用構造函數生成新數組,直接使用數組字面量是更好的做法。

偽數組

如果一個對象的所有鍵名都是正整數或零,並且有length屬性,那麽這個對象就很像數組,語法上稱為“類似數組的對象”

比如前文提到的:

var arr = {
    ‘0‘:1,
    ‘2‘:2,
    ‘3‘:3
}
  • 如何判斷數組是不是偽數組

    • 很簡單,這要這個數組的構造函數的原型是Array,他就是真數組;如果他的構造函數的原型是Object,他就是偽數組。
    // 真數組
    arr.__proto__ === Array.prototype   //true
    // 偽數組
    arr.__proto__ === Object.prototype  //true
    • Array.isArray()
      Array.isArray方法返回一個布爾值,表示參數是否為數組。它可以彌補typeof運算符的不足。
    var arr = [1, 2, 3];
    
    typeof arr // "object"
    Array.isArray(arr) // true

Array常用API

阮一峰老師的教程中有很詳細的用法講解,全盤照抄沒有意思,重要的是理解,如果實在不記得直接去查詢就可以了。

  • push()
  • pop()
  • shift()
  • unshift()
  • forEach()
  • sort()
  • join()
  • concat()
  • map()
  • filter()
  • reduce

[JavaScript]JavaScript中的Array