25_underscore.js_isArrayLike.html

來源:互聯網
上載者:User
<meta charset="utf-8"><P></P><P></P><P></P><P></P><P></P><style>*{margin: 0;padding: 0;}pre{padding: 10px;display: block;background-color: #eee;color: blue;font-size: 20px;}</style><pre><!-- 今天我們來探討一下如何?判斷一個對象是一個類數組對象 -->// 我們還需要用到上次的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));//trueconsole.log(isArrayLike(oPs));//truefunction call(a,b){console.log(isArrayLike(arguments));//true;}call(1,2);</pre># 在這裡附上我的github地址<h1><a href="https://github.com/KenNaNa/underrscore.js-">我的github</a></h1> 2018 GitHub, Inc.50 次點擊  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.