我刚刚经历过最奇怪的事情,这是我实际使用的代码:
for (iter in data.List) {
console.log(iter);
}
正如您所料,日志应该给出每行的数量(0,1,2 ......),而不是它给我这个:
0
1
2
remove
知道我的数组只有3行
有没有人想过这个?
答案 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
,因为这不是它的用途。