一、提問:在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:從數組中刪除指定對象。