js類陣列物件(array-like objects)簡單介紹

admin發表於2017-04-05

在一些關於javascript文章中,可能會有類陣列這個名詞的提及。

也有把物件當做一個陣列操作的例子,看如下程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
function func(a,b,c,d){
  var arr=[].slice.call(arguments);
  console.log(arr);
}
func(1,2,3,4);

上面的程式碼中可以將arguments物件轉換為一個真正的陣列,呼叫的是陣列的slice()方法。

arguments物件就是一個類陣列(array-like objects)。

那麼如何判斷什麼樣的物件才是一個類陣列,下面就做一下簡單介紹:

網上的資料對於類陣列的解釋如下:

[HTML] 純文字檢視 複製程式碼
So what exactly makes an object “array-like”? The basic contract of
an array object amounts to two simple rules.
It has an integer length property in the range 0...2^32 – 1.
The length property is greater than the largest index of the object.
An index is an integer in the range 0...2^32 – 2 whose string representation
is the key of a property of the object.

從上面的文字可以看出,類陣列物件主要有如下幾個特徵:

(1).物件要有一個屬性值為整數的length屬性,並且值得大小介於0到2^32 – 1之間。

(2).length屬性值要大於物件的最大的index屬性值。

(3).index屬性是作為物件的屬性的key存在的。

再來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
1: "a",
  2: "b", 
  4: "c", 
  length:5
}
var arr=[].slice.call(obj);
console.log(arr)

上面的程式碼也可以正確執行,但是並不是所有的array物件的方法都可以被類陣列物件使用。

相關文章