js中的值!

數組

和其他強類型語言不同,在 JavaScript 中,數組可以容納任何類型的值,可以是字符串、 數字、對象(object),甚至是其他數組(多維數組就是通過這種方式來實現的):

var a = [ 1, "2", [3] ];

a.length; // 3

a[0] === 1; // true

a[2][0] === 3; // true

對數組聲明後即可向其中加入值,不需要預先設定大小:

js中的值!

使用 delete 運算符可以將單元從數組中刪除,但是請注意,單元刪除後,數 組的 length 屬性並不會發生變化

在創建“稀疏”數組時要特別注意:

js中的值!

上面的代碼可以正常運行,但其中的“空白單元”(empty slot)可能會導致出人意料的結 果。a[1] 的值為 undefined,但這與將其顯式賦值為 undefined(a[1] = undefined)還是 有所區別。

數組通過數字進行索引,但有趣的是它們也是對象,所以也可以包含字符串鍵值和屬性 (但這些並不計算在數組長度內):

js中的值!

這裡有個問題需要特別注意,如果字符串鍵值能夠被強制類型轉換為十進制數字的話,它 就會被當作數字索引來處理。

在數組中加入字符串鍵值 / 屬性並不是一個好主意。建議使用對象來存放鍵值 / 屬性值, 用數組來存放數字索引值。

類數組

有時需要將類數組(一組通過數字索引的值)轉換為真正的數組,這一般通過數組工具函數(如 indexOf(..)、concat(..)、forEach(..) 等)來實現。

例如,一些 DOM 查詢操作會返回 DOM 元素列表,它們並非真正意義上的數組,但十分 類似。另一個例子是通過 arguments 對象(類數組)將函數的參數當作列表來訪問(從 ES6 開始已廢止)。

工具函數 slice(..) 經常被用於這類轉換:

js中的值!

如上所示,slice() 返回參數列表(上例中是一個類數組)的一個數組複本。

js中的值!

用 ES6 中的內置工具函數 Array.from(..) 也能實現同樣的功能:

var arr = Array.from( arguments );


分享到:


相關文章: