underscore objects

一、_.keys():获取对象的属性名,不包含原型链javascript

_.keys = nativeKeys || function(obj) {
    if (obj !== Object(obj)) throw new TypeError('Invalid object');
    var keys = [];
    //都是用自增函数
    for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
    return keys;
  };

二、_.values():返回对象的值,不包含原型链的值java

_.values = function(obj) {
    //对函数执行_.identity,并返回数组
    return _.map(obj, _.identity);
  };

三、_.functions():返回对象全部的方法名node

_.functions = _.methods = function(obj) {
    var names = [];
    for (var key in obj) {
      if (_.isFunction(obj[key])) names.push(key);
    }
    return names.sort();
  };

四、_.extend():复制source对象中的全部属性覆盖到destination对象上,而且返回 destination 对象. 复制是按顺序的正则表达式

_.extend = function(obj) {
    //会传入多个source
    each(slice.call(arguments, 1), function(source) {
      for (var prop in source) {
        obj[prop] = source[prop];
      }
    });
    return obj;
  };

五、_.pick():过滤obj,返回指定key的对象数组

_.pick = function(obj) {
    var result = {};
    each(_.flatten(slice.call(arguments, 1)), function(key) {
      if (key in obj) result[key] = obj[key];
    });
    return result;
  };

六、_.defaults():用defaults对象填充object中undefined属性。而且返回这个object。安全

_.defaults = function(obj) {
    each(slice.call(arguments, 1), function(source) {
      for (var prop in source) {
        if (obj[prop] == null) obj[prop] = source[prop];
      }
    });
    return obj;
  };

七、_.clone():浅复制object,ide

_.clone = function(obj) {
    if (!_.isObject(obj)) return obj;
    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
  };

七、_.tap(object, interceptor):用 object做为参数来调用函数interceptor,而后返回object。链式调用时颇有用函数

实例
_.chain([1,2,3,200]) .filter(function(num) { return num % 2 == 0; }) .tap(alert) .map(function(num) { return num * num }) .value();
_.tap = function(obj, interceptor) {
    interceptor(obj);
    return obj;
  };

八、eq():比较两个数据的值,是否相等spa

 

 

九、_.isEqual(); 内部函数eq的外部用法对象

_.isEqual = function(a, b) {
    return eq(a, b, []);
  };

十、_.isEmpty():测验:'', false, 0, null, undefined, NaN, [], {}

_.isEmpty = function(obj) {
   //null, undefined if (obj == null) return true;
   //'',[] if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; for (var key in obj) if (_.has(obj, key)) return false;
   //false,0,NaN return true; };

十一、_.isElement():验证对象是不是一个DOM对象 

    _.isElement = function(obj) {
     //为何要写!! return !!(obj && obj.nodeType == 1); };

十二、_.isArray():验证对象是不是一个数组类型, 优先调用宿主环境提供的isArray方法;isFunction;isString;isNumber,isDate,isRegExp;一样 

    _.isArray = nativeIsArray ||
    function(obj) {
        return toString.call(obj) == '[object Array]';
    };

1三、_.isObject():证对象是不是一个复合数据类型的对象(即非基本数据类型String, Boolean, Number, null, undefined)

若是基本数据类型经过new进行建立, 则也属于对象类型 

    _.isObject = function(obj) {
        return obj === Object(obj);
    };

 1四、_.isArguments():检查一个数据是不是一个arguments参数对象

    _.isArguments = function(obj) {
        return toString.call(obj) == '[object Arguments]';
    };
    // 验证isArguments函数, 若是运行环境没法正常验证arguments类型的数据, 则从新定义isArguments方法
//还能够这样... if(!_.isArguments(arguments)) { // 对于环境没法经过toString验证arguments类型的, 则经过调用arguments独有的callee方法来进行验证 _.isArguments = function(obj) { // callee是arguments的一个属性, 指向对arguments所属函数自身的引用
       //有这个属性,就是arguments return !!(obj && _.has(obj, 'callee')); }; }

1五、_.isFunction():判断是否为函数

_.isFunction = function(obj) {  
    return toString.call(obj) == '[object Function]';  
};  

1六、_.isString():验证对象是不是一个字符串类型 

_.isString = function(obj) {  
    return toString.call(obj) == '[object String]';  
};  

1七、_.isNumber():验证对象是不是一个数字类型 

_.isNumber = function(obj) {  
    return toString.call(obj) == '[object Number]';  
};  

18_.isFinite(): 检查一个数字是否为有效数字且有效范围(Number类型, 值在负无穷大 - 正无穷大之间)

_.isFinite = function(obj) {
     //isFinite()是window函数 return _.isNumber(obj) && isFinite(obj); };

1九、_.isNaN(): 检查数据是否为NaN类型(全部数据中只有NaN与NaN不相等)

    _.isNaN = function(obj) {
        return obj !== obj;
    };

20、 _.isBoolean():检查数据是否为Boolean类型

    _.isBoolean = function(obj) {
        // 支持字面量和对象形式的Boolean数据
        return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
    };

2一、_.isDate():检查数据是不是一个Date类型 

_.isDate = function(obj) {  
    return toString.call(obj) == '[object Date]';  
}; 

2二、_.isRegExp():检查数据是不是一个正则表达式类型

_.isRegExp = function(obj) {  
    return toString.call(obj) == '[object RegExp]';  
};

2三、_.isNull():检查数据是否为null 

 _.isNull = function(obj) {
        return obj === null;
    };

2四、_.isUndefined():检查数据是不是Undefined(未定义的)值 

    _.isUndefined = function(obj) {
        return obj === void 0;
    };

2五、_.has():对象自己是否包含指定的属性,不检查原型链,是hasOwnProperty的安全封装

_.has = function(obj, key) {   //其实这种不安全,后面的版本会改进
    return hasOwnProperty.call(obj, key);
  };
相关文章
相关标签/搜索