jquery源码分析系列2
// results is for internal usage only 只是为了内部使用
var ret = results || [];
// 如果有arr
if (arr != null) {
if (isArraylike(Object(arr))) {
jQuery.merge(ret,
typeof arr === "string" ?
[arr] : arr
);
} else {
push.call(ret, arr);
}
}
return ret;
},
// 很多地方都使用了这个函数
//判断是否是数组或者是类数组 返回值是boolean
function isArraylike(obj) {
var length = obj.length,
type = jQuery.type(obj);//查看参数的类型 什么类型能够拥有length属性呢 一个是数组 一个是obj 一个就是function
//如果是函数 或者是window本身 【因为window也是object类型】 直接返回false
if (type === "function" || jQuery.isWindow(obj)) {
return false;
}
//如果是元素类型 并且又length属性 就为真----》 其实就是元素集合
if (obj.nodeType === 1 && length) {
return true;
}
//如果是一个数组 等就是真
//疑问: 为啥还要检查是不是长度是0 的情况呢
return type === "array" || length === 0 ||
typeof length === "number" && length > 0 && (length - 1) in obj;
}