gpt4 book ai didi

javascript - Chrome 将 'remove' 元素添加到数组?

转载 作者:行者123 更新时间:2023-11-29 22:08:33 24 4
gpt4 key购买 nike

这似乎是从最新的 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);
}

我注意到经常出现额外的“删除”项。问题是它破坏了我下载使用的几个 jQuery 插件,它们的代码如下:

for (var i in lines) {
line = lines[i].split("=");
...

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

最佳答案

这看起来像是一个你不应该使用构造 for (var i in lines) 的经典理由枚举数组中的条目。

for (var i in lines)构造枚举数组对象的属性,包括超出数字数组索引的内容,例如添加的属性和可枚举的方法。

如果您使用 for (var i = 0, len = lines.length; i < len; i++) ,您只会枚举数组中的实际项目。


我们猜测您正在使用的某些第 3 方库正在添加 .remove()方法到数组对象,因此当你迭代任何数组实例的可枚举属性时,你也会得到 remove属性(property)。

如果切换到 for (var i = 0, len = lines.length; i < len; i++)数组枚举的方法,就不会有这个问题。

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

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

关于javascript - Chrome 将 'remove' 元素添加到数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19598411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com