2013-08-07 30 views
6

我刚刚经历了奇怪的事情,这是我实际使用的代码:For循环数组读取'remove'?

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

正如你所期望的,日志应该给每一行的数字(0,1,2 ...) ,相反,它给了我这样的:

0 
1 
2 
remove 

知道了我的阵列只有3行

有没有人曾经encountred呢?

+4

向我们显示创建您的列表的代码。 –

+1

我建议不要使用'for in'作为数组(参见http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea ) –

+0

我建议阅读[关于'for ... in的MDN文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) 。它告诉你问题是什么。 –

回答

9

基本上,问题是你正在遍历你的数组使用for in循环,这不意味着通过数组迭代。它的目的是遍历一个对象的所有属性,显然在你的数组上有一个名为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,一个很好的阅读。

+0

非常有帮助的回答,谢谢! – Mehdiway

+0

它有帮助,将此答案标记为答案会很好:-) –

+0

正在等待剩下的时间将答案标记为正确的答案;) – Mehdiway

6

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