jquery源码--isWindow isArraylike makearray

1.$.isWindow 判断是不是window对象

var isWindow = function(obj){
     return obj != null && obj == obj.window;
//window对象有个window属性指向自己      
}

2.isArraylike 判断一个对象是不是数组或类数组对象

var isArrayLike = function(obj){
        var length = obj.length,
            type = $.type(obj);
        if(type == 'function' || $.isWindow(obj) ){
        //function和window都有length属性
            return false;
        }
        if(obj.nodeType == 1 && length){
            return true;
        }
        
        return type === 'array' || length === 0 ||
                typeof length === 'number' && length > 0 && (length - 1) in obj;
    // typeof length === 'number' && length > 0 && (length - 1) in obj就是针对类数组对象的
  /*类数组对象举例
*var obj = {'0' : 0,'1' : 1, '2' : 2,'length' : 3}
*/ }

3.$.makeArray()  强制转换成数组类型

var makeArray = function(arr, result){
        var ret = result || [];
        if(arr != null){
            if(isArraylike(arr)){//string array
                $.merge(ret, typeof arr === 'string' ? [arr] : arr);//$.merge可以修改第一个参数
            }else{
                [].push.call(arr);
            }
        }
        return arr;
    };

下面是各种数值类型作为Object参数时的返回,例如Object(true),它返回Boolean {},string类型返回一个类数组对象,array类型直接返回一个数组,date类型返回一长串,number类型返回number {},等等。所以通过isArraylike函数过滤之后,只剩下array和string类型了。

原文地址:https://www.cnblogs.com/it-snail/p/3873359.html