原文:http://www.javashuo.com/article/p-pojgutlf-x.htmljavascript
定義:java
var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei'
var c = {'1':2};
沒有length
屬性,因此就不是類數組。node
javascript中常見的類數組有arguments
對象和DOM方法的返回結果。
好比 document.getElementsByTagName()
。segmentfault
《javascript權威指南》上給出了代碼用來判斷一個對象是否屬於「類數組」。以下:數組
// Determine if o is an array-like object. // Strings and functions have numeric length properties, but are // excluded by the typeof test. In client-side JavaScript, DOM text // nodes have a numeric length property, and may need to be excluded // with an additional o.nodeType != 3 test. function isArrayLike(o) { if (o && // o is not null, undefined, etc. typeof o === 'object' && // o is an object isFinite(o.length) && // o.length is a finite number o.length >= 0 && // o.length is non-negative o.length===Math.floor(o.length) && // o.length is an integer o.length < 4294967296) // o.length < 2^32 return true; // Then o is array-like else return false; // Otherwise it is not }
之因此成爲「類數組」,就是由於和「數組」相似。不能直接使用數組方法,但你能夠像使用數組那樣,使用類數組。ide
var a = {'0':'a', '1':'b', '2':'c', length:3}; // An array-like object Array.prototype.join.call(a, '+''); // => 'a+b+c' Array.prototype.slice.call(a, 0); // => ['a','b','c']: true array copy Array.prototype.map.call(a, function(x) { return x.toUpperCase(); }); // => ['A','B','C']:
有時候處理類數組對象的最好方法是將其轉化爲數組。spa
Array.prototype.slice.call(arguments)
而後就能夠直接使用數組方法啦。prototype
var a = {'0':1,'1':2,'2':3,length:3}; var arr = Array.prototype.slice.call(a);//arr=[1,2,3]
對於IE9之前的版本(DOM實現基於COM),咱們能夠使用makeArray
來實現。code