一、_.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); };