Javascript数组扩展方法在for循环中迭代

时间:2011-08-04 13:13:37

标签: javascript arrays iteration prototype-programming

我为数组对象创建了一个JavaScript扩展,如下所示:

Array.prototype.where = function (lamda) {
var results = [];

for (var i in this) {
    if (lamda(this[i])) {
           results.push(this[i]);
        }
    }

    return results;
}

当我使用for循环迭代数组时:

var myArray = [1,2,3,4];

for(var i in myArray){
   alert(myArray[i]);
}

...我的扩展名也被枚举。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

此行为是设计使然 for / in循环遍历对象中的每个属性,包括从原型继承的属性。

您可以检查if (myArray.hasOwnProperty(i))以跳过继承的属性。

但是,您应该使用常规的for循环 Javascript的for / in循环不打算循环遍历数组。

答案 1 :(得分:3)

这是javascript的正常功能。 for .. in循环获取对象的所有键,因为它用于循环对象,而不是数组。