对于数组中的循环读取'删除'?

时间:2013-08-07 12:16:24

标签: javascript

我刚刚经历过最奇怪的事情,这是我实际使用的代码:

for (iter in data.List) {
    console.log(iter);
}

正如您所料,日志应该给出每行的数量(0,1,2 ......),而不是它给我这个:

0
1
2
remove

知道我的数组只有3行

有没有人想过这个?

2 个答案:

答案 0 :(得分:9)

基本上,问题是你是使用for in循环遍历数组,这不是通过数组的iteratung。它的目的是迭代对象的所有属性,显然在你的数组上有一个名为remove的属性。

有关为什么for in在数组方面不好主意的详细信息,请参阅Why is using "for...in" with array iteration a bad idea?

作为解决方案,我建议使用索引for循环。这种类型的循环不关心属性,因此你很好。所以它基本上归结为非常经典:

for (var i = 0; i < data.List; i++) {
  console.log(data.List[i]);
}

顺便说一下:除非是构造函数,否则不应该在JavaScript中使用大写字母。因此它应该是data.list

PS:关于数组和(错误)使用它们的一个很好的阅读,阅读Fun with JavaScript Arrays,一个非常好的阅读。

答案 1 :(得分:6)

是的,这就是for..in在JavaScript中的工作方式。它枚举所有对象属性(不是数组索引)。简单的解决方案:不要在数组上使用for..in,因为这不是它的用途。