Javascript 扩展数组的问题

Javascript 扩展数组的问题,javascript,arrays,dom,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;}; Arra

我有个问题。我已经为扩展数组元素编写了一个代码,工作正常,但当我在数组上迭代时,它会显示扩展函数。我不知道怎样才能阻止这一切。 这是密码

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)”,因为它在许多文件中多次出现。

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


您将不得不为…重写
。。。在
循环中。如果必须修改
数组
原型,则必须使用,否则它将拾取原型链上的属性

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

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

要阅读的两个内容将解释这种情况

迭代数组时使用.forEach()。它得到了很好的支持,包括Mobile Safari和Android,

遍历数组的索引-

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]
}
var A=[1,2,3,4,5];
Array.peototype.omega=函数(replacer){
var L=此长度;
如果(L)-L;
如果(replacer!=未定义),则此[L]=replacer;
返回此[L]
}

对于(var i=0,L=A.length;i您正在尝试迭代数组中的值,但它也在迭代您的自定义函数?您不应该在数组中使用for..in,因为枚举的顺序取决于实现。大多数浏览器将以从低到高的顺序首先返回数字键,但IE将按它们返回的顺序返回键因此,只有当它们的添加顺序是这样时,才会从低到高。例如,`var i=2,a=[],p;而(i--)a[i]=i;for(p in a)alert(p);'在大多数浏览器中显示0,1,但在IE中显示1,0。“我无法更改代码…”当然可以,而且你应该这样做。编写错误代码的成本是修复错误代码。[Waves hand]“你将修复错误的JavaScript。”OP回答:“我将修复错误的JavaScript。”@patrick Ta kur pe je lax ne punu isok!
forEach()
目前还没有得到广泛支持,但如果目标平台支持它,它是一个不错的选择。它得到了很好的支持。唯一支持它的IE是IE9。对于大多数面向公众的网站来说,这是一个小问题(除非你对其进行修补,MDN文档有一个很好的例子).array是对象,
for..in
将循环遍历所有数组属性,包括具有数字名称的属性。确切地说。这意味着在
中使用
for..in就好像它是来自其他语言的
foreach
是错误的。