Javascript 添加铬';拆下';元素到数组?

Javascript 添加铬';拆下';元素到数组?,javascript,arrays,google-chrome,Javascript,Arrays,Google Chrome,这似乎是从最新的Chrome更新开始的,我正试图找到关于它的信息,但没有成功。考虑下面的代码: var lines = ['asdf','qwer','']; for (var i in lines) console.log(i, lines[i]); 如果我在Firefox“Firebug”控制台中运行它,我的输出(如预期)如下: 0 asdf 1 qwer 2 (an empty string) 但是,当我在Chrome控制台中运行它时,我得到以下信息: 0 asdf 1 qwer 2

这似乎是从最新的Chrome更新开始的,我正试图找到关于它的信息,但没有成功。考虑下面的代码:

var lines = ['asdf','qwer',''];
for (var i in lines) console.log(i, lines[i]);
如果我在Firefox“Firebug”控制台中运行它,我的输出(如预期)如下:

0 asdf
1 qwer
2 (an empty string)
但是,当我在Chrome控制台中运行它时,我得到以下信息:

0 asdf
1 qwer
2 
remove function ( from, to )
{
    var rest = this.slice((to || from) + 1 || this.length);
    this.length = from < 0 ? this.length + from : from;

    return this.push.apply(this, rest);
}

由于额外的元素是一个函数,而不是一个字符串,因此它没有
split()
函数,因此我的代码会因错误而停止运行。我不想在所有代码中手动删除数组中的元素,那么在执行之前是否可以设置某种标志或运行某种命令来防止添加额外的元素?

这似乎是一个典型的原因,为什么永远不应该使用构造
for(行中的var I)
枚举数组中的项

for(vari in line)构造枚举数组对象的属性,包括数字数组索引之外的内容,例如添加的属性和可枚举的方法

如果将
用于(var i=0,len=lines.length;i
,则只能枚举数组中的实际项


我们猜测,您正在使用的某个第三方库正在向数组对象添加一个
.remove()
方法,因此,当您迭代任何数组实例的可枚举属性时,您也将获得
remove
属性

如果切换到数组枚举的
方法(var i=0,len=lines.length;i
,则不会出现此问题

for (var i = 0, len = lines.length; i < len; i++) {
    line = lines[i].split("=");
    ...
}
for(变量i=0,len=lines.length;i


仅供参考,
lines.hasOwnProperty(i)
也可用于解决此问题,但如果您只是想枚举数组项,则应该使用正确的数组枚举方法。

请不要使用
来。。。在使用Arrays的
中,chrome的具体版本是什么?更可能的是,这是一个插件向数组的原型添加了一个
remove
for(数组中的var)
包括继承属性。您应该使用数值迭代或检查
行。hasOwnProperty(i)
。请看,我编辑了我的问题,以便更清楚地表明我没有编写这些插件,它们是我下载供使用的东西。这一切都很好,但在这一点上,我有一个非常大的网站,直到最近才开始工作,而现在没有。我不想在40000行代码中寻找
的实例,因为。。。在
中并替换它们。同样,这只发生在Chrome上,而不是Firefox上。有没有办法阻止这种情况发生?@DiMono-你的代码是错误的,你把它与第三方库结合在一起,使错误的代码中断。您可以通过删除添加
.remove
属性的第三方库或修复代码来修复它。说真的,在有大量第三方代码的情况下使用
for(i in line)
是一颗滴答作响的定时炸弹,它会在你身上爆炸。你真的应该修改你的代码。如果您现在不修复代码并找到解决方法,那么错误的代码可能会在将来某个时候再次爆炸。优秀的软件工程师会花时间修复错误的代码。这不是我写的代码,主要是第三方jQuery插件。然而,我已经证实,在一个赤裸的Chrome窗口中,这不会发生。因此,这确实与另一个插件添加的.remove属性有关。感谢您的回答,您的回答表明这可能是问题所在,是时候去寻找了。
for(i in line)
与向数组对象添加可枚举方法的插件不兼容。您必须修复代码或删除插件。
for (var i = 0, len = lines.length; i < len; i++) {
    line = lines[i].split("=");
    ...
}