日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

underscore.js源码解析2

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 underscore.js源码解析2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • _.isNull(object)
    如果object的值是null,返回true。
  • _.isNull(null);
    => true;
    _.isNull(undefined);
    => false;

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

    undefined派生自null,所以兩者相等(==),但是不全等(===),所以這里如果obj是undefined則會返回false。

    2.isArray(object)
    如果object是一個數組,返回true

    (function() {return _.isArray(arguments);}();
    => false 這里的arguments是一個類數組,所以返回false
    _.isArray([1,2,3])
    => true

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

    如果有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 + ']';};});
  • _.isBoolean(object)
    如果object是一個布爾值,返回true,否則返回false
  • _.isBoolean(null)
    => false

    _.isBoolean = function(obj) {return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; }
  • _.isNaN(object)
    如果object是NaN,返回true
    注意:這和原生的isNaN函數不一樣,如果變量是undefined,原生的isNaN函數也會返回true。
  • _.isNaN(NaN);
    => true
    isNaN(undefined);
    => true
    _.isNaN(undefined);
    => false

    _.isNaN = function(obj) {return _.isNumber(obj) && obj !== +obj; //"+obj"是把其他類型轉換成Number類型的快捷方式 }
  • isFinite(object)
    如果object是一個有限數字,返回true
  • _.isFinite(-101);
    => true
    _.isFinite(-Inifinity);
    => false

    _.isFinite = function(obj) {return isFinite(obj) && !isNaN(parseFloat(obj));};
  • isObject(value)
    如果object是一個對象,返回true。
    需要注意的是js數組和函數是對象,字符串和數字不是。
  • _.isObject({})
    => true
    _.isObject(1)
    =>false

    _.isObject = function(obj) {var type = typeof obj;return type === 'function' || type === 'object' && !!obj;};

    "!!obj"是為了排除null以及undefined

  • isElement(object)
    如果object是一個DOM元素,返回true
  • _.isElement(document.body);
    => true

    _.isElement = function(obj) {return !!(obj && obj.nodeType === 1); }
  • _.has(object,key)
    對象是否包含給定的鍵嗎?等同與object.hasOwnProperty(key),但是使用hasOwnProperty函數的一個安全引用,以防止意外覆蓋。
  • _.has({a: 1 , b: 2,c: 3}, "b");
    => true

    var ObjProto = Object.prototype; var hasOwnProperty = Object.hasOwnProperty; _.has = function(obj,key) {return obj != null &&hasOwnProperty.call(obj,key); }

    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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。