关于什么是js的类数组对象这里不再赘述。可以参考这个链接,还有这里

js中类数组对象很多,概念简单的讲就是看上去像数组,又不是数组,可以使用数字下标方式访问又没有数组方法。

例: arguments , NodeList , HTMLCollection , jQuery 等

 

类数组对象特性

1、拥有 length 属性

var a=document.getElementsByTagName("div");
a.__proto__;// HTMLCollection {} 属于类数组对象
a.length;//62

 

2、可以使用数字下标的方式访问对象

a[0];//<div class=​"aspNetHidden">​…​</div>​

 

3、不能使用数组原型的方法(如 slice , pop 等)

a.slice;//undefined Error!
a.pop;//undefined Error!

 

4、使用 instanceof 操作不属于 Array 

[] instanceof Array;//true
a instanceof Array;//false

 

5、可以转换为真数组对象

var arr = Array.prototype.slice.call(a);
arr instanceof Array;//true

PS:注意在IE8下部分对象无法使用slice方法转换为真数组对象。

建议使用jquery提供的 $.makeArray() 方法转换类数组对象

// results is for internal usage only
makeArray: function( arr, results ) {
    var ret = results || [];

    if ( arr != null ) {
        if ( isArraylike( Object(arr) ) ) {
            jQuery.merge( ret,
                typeof arr === "string" ?
                [ arr ] : arr
            );
        } else {
            core_push.call( ret, arr );
        }
    }

    return ret;
},
merge: function( first, second ) {
    var l = second.length,
        i = first.length,
        j = 0;

    if ( typeof l === "number" ) {
        for ( ; j < l; j++ ) {
            first[ i++ ] = second[ j ];
        }
    } else {
        while ( second[j] !== undefined ) {
            first[ i++ ] = second[ j++ ];
        }
    }

    first.length = i;

    return first;
}
jQuery.makeArray源码

相关文章: