underscore.js源码解析2
如果object的值是null,返回true。
_.isNull(null);
=> true;
_.isNull(undefined);
=> false;
undefined派生自null,所以兩者相等(==),但是不全等(===),所以這里如果obj是undefined則會返回false。
2.isArray(object)
如果object是一個數(shù)組,返回true
(function() {return _.isArray(arguments);}();
=> false 這里的arguments是一個類數(shù)組,所以返回false
_.isArray([1,2,3])
=> true
如果有es5原生的isArray()方法,就用原生的;如果沒有就調(diào)用經(jīng)典的數(shù)組判斷方法,通過Object.prototype.toString()方法,判斷某個對象值屬于哪種內(nèi)置類型。
3.isArguments、isFunction、isString、isNumber、isDate、isRegExp、isError這些方法放到一起講,因為這些方法的的源碼實現(xiàn)都是放到了一個each函數(shù)中遍歷每一個方法名然后實現(xiàn)的布爾值判定。源碼:
_.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {_['is' + name] = function(obj) {//調(diào)用Object原生的toString()方法,實現(xiàn)安全的類型檢測return toString.call(obj) === '[object ' + name + ']';};});如果object是一個布爾值,返回true,否則返回false
_.isBoolean(null)
=> false
如果object是NaN,返回true
注意:這和原生的isNaN函數(shù)不一樣,如果變量是undefined,原生的isNaN函數(shù)也會返回true。
_.isNaN(NaN);
=> true
isNaN(undefined);
=> true
_.isNaN(undefined);
=> false
如果object是一個有限數(shù)字,返回true
_.isFinite(-101);
=> true
_.isFinite(-Inifinity);
=> false
如果object是一個對象,返回true。
需要注意的是js數(shù)組和函數(shù)是對象,字符串和數(shù)字不是。
_.isObject({})
=> true
_.isObject(1)
=>false
"!!obj"是為了排除null以及undefined
如果object是一個DOM元素,返回true
_.isElement(document.body);
=> true
對象是否包含給定的鍵嗎?等同與object.hasOwnProperty(key),但是使用hasOwnProperty函數(shù)的一個安全引用,以防止意外覆蓋。
_.has({a: 1 , b: 2,c: 3}, "b");
=> true
hasOwnProperty() 方法會返回一個布爾值,指示對象是否具有指定的屬性作為自身(不繼承)屬性。
學習參考:
http://www.qdfuns.com/house/17398/note/class/id/bb6dc3cabae6651b94f69bbd562ff370/page/2.html
https://github.com/hanzichi/underscore-analysis/blob/master/underscore-1.8.3.js/underscore-1.8.3-analysis.js
http://www.css88.com/doc/underscore/#isEmpty
http://www.css88.com/doc/underscore/docs/underscore.html
這是我學習underscore受益匪淺的幾個網(wǎng)站和大神寫得博文,想學好underscore的話就去看看吧
總結(jié)
以上是生活随笔為你收集整理的underscore.js源码解析2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Facebook 宣布开源无线设备 打造
- 下一篇: Cocos2d-x 3.0正式版及and