在js的学习中经常见到描述一个对象为类数组对象,那么到底什么样的对象可以称为类数组对象呢?
类数组对象有两个要求:
jQuery源码中isArraylike(obj)方法,字面理解像是判断对象是否是类数组对象的,我们来看一下
function isArraylike( obj ) {
// Support: iOS 8.2 (not reproducible in simulator)
// `in` check used to prevent JIT error (gh-2145)
// hasOwn isn't used here due to false negatives
// regarding Nodelist length in IE
var length = "length" in obj && obj.length,
type = jQuery.type( obj );
if ( type === "function" || jQuery.isWindow( obj ) ) {//不能是函数或者window对象,因为这两者也有length属性
return false;
}
if ( obj.nodeType === 1 && length ) {//如果是元素节点且有length属性,则返回真。
return true;
}
return type === "array" || length === 0 ||
typeof length === "number" && length > 0 && ( length - 1 ) in obj;
}
isWindow: function( obj ) {
/* jshint eqeqeq: false */
return obj != null && obj == obj.window;
}
目前我的理解是这个方法中
typeof length === "number" && length > 0 && ( length - 1 ) in obj //数组下标为数组对象的key
这句代码是判断对象是否为类数组对象的,整个方法判断的是否是数组,类数组,带length的json,是的话就返回真
jquery对象本身就是类数组对象,含有连续的整型属性,length属性和大量的jquery方法。
下面这篇文章写得不错,很详细
http://blog.csdn.net/liangklfang/article/details/48657845