我为数组对象创建了一个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]);
}
...我的扩展名也被枚举。
有什么想法吗?
答案 0 :(得分:7)
此行为是设计使然
for
/ in
循环遍历对象中的每个属性,包括从原型继承的属性。
您可以检查if (myArray.hasOwnProperty(i))
以跳过继承的属性。
但是,您应该使用常规的for
循环
Javascript的for
/ in
循环不打算循环遍历数组。
答案 1 :(得分:3)
这是javascript的正常功能。 for .. in
循环获取对象的所有键,因为它用于循环对象,而不是数组。