这似乎是从最新的 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++)
,您只会枚举数组中的实际项目。
我们猜测您正在使用的某些第三方库正在添加 .remove()
数组对象的方法,因此当您迭代任何数组实例的可枚举属性时,您还会得到 remove
属性。
如果切换到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/