亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

25_underscore.js_isArrayLike.html

標簽:
Java

  // 我们还需要用到上次的

    var shallowProperty = function(key) {

        return function(obj) {

          return obj == null ? void 0 : obj[key];

        };

      };

      //首先我们得来弄清楚啥是类数组对

      var arr = Array();//这是真正的数组具有length属性

      console.log(arr.length)//0

      // 真正的数组对象是可以使用Array.prototype对象上的所有方法的

      // 但是类数组也具有length属性

      // 但是呢,他们不能使用Array.prototype上的所有方法

      // 这就是区别所在啊

      var o = {

          length:2,

          name:'ken',

          age:18

      }

      // 那么那些是类数组对象呢

      // 比如函数参数里面的 arguments

      // 比如DOM对象,我们通过getElementsBy* 等方式获取的集合都是类数组

      // 都可以使用下标操作的,

      // 但是我们要如何判断一个对象是一个类数组对象

      // 光判断具有length属性是行不通的,

      // 上面我们说过,他们不具备Array.prototype 上的所有方法

      // length 属性的值必须是有限的

      // 下面我们来看看我们underscore.js是如何实现的呢

      var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;

      var getLength = shallowProperty('length');

      var isArrayLike = function(collection) {

          // 获取length属性

        var length = getLength(collection);

        // 判断length的类型是否number类型

        return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;

    };

    console.log(isArrayLike(o))

    // 但是我们感觉也不够精确啊

    // 我觉得应该判断方法

    // 我们自己来实现以下

    var isArrayLike = function(collection){

        var length = getLength(collection);

        return (!(Array.prototype.alice in collection) && !(Array.prototype.split in collection)) && typeof length === 'number' && length>=0 && length<=MAX_ARRAY_INDEX;

    }

    var oPs = document.querySelectorAll("p")

    console.log(isArrayLike(o));//true

    console.log(isArrayLike(oPs));//true

    function call(a,b){

        console.log(isArrayLike(arguments));//true;

    }

    call(1,2);

在这里附上我的github地址

我的github



作者:每天学点英语翻译
链接:https://www.jianshu.com/p/92b91cdb3948



點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 2
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消