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