6

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

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

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

0
1
2
remove

知道我的数组只有 3 行

有没有人遇到过这个?

4

2 回答 2

9

基本上,问题在于您正在使用for in循环遍历数组,这并不意味着遍历数组。它的目的是遍历一个对象的所有属性,显然remove你的数组上有一个属性。

有关for in数组为什么是一个坏主意的更多详细信息,请参阅为什么将“for...in”与数组迭代一起使用是一个坏主意?.

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

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

顺便说一句:你不应该在 JavaScript 中大写任何东西,除非它是一个构造函数。因此它应该是data.list

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

于 2013-08-07T12:18:59.240 回答
6

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

于 2013-08-07T12:18:49.400 回答