关于什么是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; }