3

任何人都可以解释如何在 javascript 中使用 for...in 语句。我已经阅读了 w3school 的文章,但我认为它不是很清楚。下面是代码,请解释一下:

<html>
<body>
<script type="text/javascript">
var x;
var mycars = new Array();
mycars[10] = "Saab";
mycars[20] = "Volvo";
mycars[30] = "BMW";

for (x in mycars)
{
document.write(mycars[x] + "<br />");
}
</script>
</body>
</html>
4

4 回答 4

7

for in循环将遍历对象中的每个属性。

在您的示例中,x变量将循环遍历mycars对象中的每个属性。

如果添加mycars.expensive = "Porsche";,它也会发现。


请注意,如MDC所述,for in循环应用于遍历普通数组:

尽管将其用作迭代Array的方法可能很诱人,但这是一个坏主意。除了数组元素之外,该 for...in语句还遍历用户定义的属性,因此,如果您修改数组的非整数或非正数属性(例如,通过向其添加"foo"属性,甚至向 中添加方法或属性 Array.prototype),则该 for...in语句除了数字索引之外,还将返回用户定义属性的名称。此外,由于迭代顺序是任意的,因此对数组进行迭代可能不会按数字顺序访问元素。因此最好使用传统遍历数组时使用数字索引循环。甚至可能使用类似的参数来反对甚至使用 for...in (至少没有propertyIsEnumerable () 或 hasOwnProperty() 检查),因为它还将迭代 Object.prototype (虽然通常不鼓励,但可以,如在 Array.prototype 的情况下,由用户进行有用的扩展,如果包含可能不会对此类迭代执行上述检查的其他库,并且他们知道此类扩展将对他们自己的使用产生的影响,则不会引起命名空间问题迭代器,例如 for...in)。

于 2010-12-30T02:13:14.977 回答
1

首先,您创建一个包含 3 个项目的对象(而不是数组)

  var mycars = new Object();
  mycars[10] = "Saab";
  mycars[20] = "Volvo";
  mycars[30] = "BMW";

其中102030对象属性。
然后您想要浏览对象,访问所有属性并显示与属性关联的每个值。

这是 [ for( variable in object ) expression ] javascript 构造介入
的地方:变量将设置为对象的第一个属性,然后设置为第二个,然后设置为最后一个。尝试

  for (v in mycars) alert(v);

看看它是如何工作的,这也是

  for (v in mycars) alert("Property: "+v+", value: "+mycars[v]);
于 2010-12-30T02:22:09.320 回答
0

for ... in构造遍历右侧对象中的每个元素infor在您的情况下,语句下方的块对mycars.

于 2010-12-30T02:14:32.037 回答
0

for in是一种埋虫方式,供后人发现。正如已经大量指出的那样,如果应用于数组,它将遍历数组的所有元素,数组的长度,以及碰巧附加到数组的任何其他数据。将其应用于普通对象会更好,但您仍然应该通过hasOwnProperty.

最好使用框架提供的函数,如 jQuery 的$.each

于 2010-12-30T02:48:44.980 回答