EXTJS中用for in進行數組遍曆陷阱分類

來源:互聯網
上載者:User

一、提問:在extjs中有如下代碼,猜一下執行後的結果?var arr=[1,2,3];for(var k in arr){alert(arr[k]);}二、答案:會先後alert出來5項:1,2,3,function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c ===b){return c}}return -1},function(b){var a=this.indexOf(b);if(a!=-1){this.splice(a,1)}return this}三、解決方案有兩種:1、用length來遍曆:var arr=[1,2,3];var arrLen=arr.length;for(var i=0; i alert(arr[i]);}2、增加判斷條件:var arr=[1,2,3];for(var k in arr){if(arr.hasOwnProperty(k)){alert(arr[k]);}}四、分析原因:將�0�2 alert(arr[k]);�0�2�0�2 改為�0�2 alert(k+’�0�2�0�2�0�2 ‘+arr[k]);�0�2�0�2 就會看到k值比預期多了indexOf和remove。用for in遍曆數組的缺點再次暴露出來。查看ext-base.js源碼你會發現ExtJS對JavaScript中的Array、Date、Function、Number、string等進行了擴充,對數組的擴充代碼如下:Ext.applyIf(Array.prototype, {indexOf: function(b, c) {var a = this.length;c = c || 0;c += (c < 0) ? a: 0;for (; c < a; ++c) {if (this  === b) {return c}}return - 1},remove: function(b) {var a = this.indexOf(b);if (a != -1) {this.splice(a, 1)}return this}}); 方法說明:indexOf:判斷指定對象是否存在於數組中,如果存在則返回對應的索引,如果不存在則返回-1。remove:從數組中刪除指定對象。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.