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

Jac*_*cob 4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

for(var i in myArray){
   alert(myArray[i]);
}
Run Code Online (Sandbox Code Playgroud)

...我的扩展也被列举了.

有任何想法吗?

SLa*_*aks 7

此行为是设计使然.
for/ inloops迭代对象中的每个属性,包括从原型继承的属性.

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

但是,您应该使用常规for循环.
Javascript的for/ inloop不是为了遍历数组.