扩展数组的问题

时间:2011-08-15 23:38:52

标签: javascript arrays dom

我有一个问题。我已经编写了一个扩展数组元素的代码,并且工作正常,但是当我迭代数组时,这显示了扩展函数。我不知道怎么阻止这个。 有代码......

Array.prototype.remove  = function(e)   {var i = this.inArray(e);if(i != -1) this.splice(i, 1);return this;};
Array.prototype.add     = function(e)   {this.push(e); return e;};
Array.prototype.inArray = function(v)   {for(i in this) if(v==this[i])return i;return false;};
Array.prototype.toggle  = function(v)   {this.inArray(v) ? this.remove(v) : this.add(v);return this;};

所以当我试着这个......

var arr = [1,2,3,4,5];
for(i in arr)
document.write(arr[i]);

此打印数组值和函数已扩展。有人可以帮帮我吗?我无法更改代码“for(x in y)”,因为在很多文件中很多次。

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

如果您必须修改Array原型,则必须使用hasOwnProperty(),否则它将获取原型链中的属性。

var arr = [1,2,3,4,5];
for(var i in arr) {
    if (arr.hasOwnProperty(i)) {
        document.write(arr[i])
    }
}

但是,您说,您不想更改for (in)循环。为什么你没有Array实用程序对象?或者只使用普通的for循环?这些是Array对吗? for (in)用于迭代Object属性。

答案 2 :(得分:0)

for ... in在JavaScript中循环对象属性,而不是数组元素for ... in循环只是错误的方法。您已经说过无法更改它们,但是由于您刚刚发现的原因,使用此语法枚举数组的内容并不是JavaScript中推荐的做法。

您迟早要重写for ... in循环。

答案 3 :(得分:0)

遍历数组的索引.-

var A=[1,2,3,4,5];

Array.peototype.omega=function(replacer){
  var L= this.length;
  if(L)--L;
  if(replacer!=undefined)this[L]=replacer;
  return this[L]
}

for(var i=0,L=A.length; i<L; i++){
//do something to A[i]
}