当前位置:编程学习 > JS >>

EXTJS中用for in进行数组遍历陷阱分类

一、提问:在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:从数组中删除指定对象。
 
补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,