JavaScript中的for...in语句是什么?

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个回答

7

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

在你的例子中,x变量将会遍历mycars对象中的所有属性。

如果你添加mycars.expensive = "Porsche";,它也会被遍历到。


需要注意的是,正如MDC所述,不应该使用for in循环遍历普通数组:

虽然这可能是一种遍历数组的方法,但这是不好的。 for…in语句遍历用户定义的属性以及数组元素,因此如果您修改了数组的非整数或非正属性(例如通过向其中添加"foo"属性,甚至通过向Array.prototype添加方法或属性),for…in语句将返回您自定义的属性名称以及数字索引。此外,由于迭代顺序是任意的,因此遍历数组可能不按数字顺序访问元素。因此,当遍历数组时最好使用传统的for循环和数字索引。甚至可能会对完全使用for…in(至少不使用propertyIsEnumerable()或hasOwnProperty()检查)提出类似的论据,因为它还将迭代Object.prototype(虽然通常不鼓励这样做,但是在Array.prototype等情况下,用户可以有用地扩展它,其中没有由包含其他库的命名空间问题引起的影响,这些库可能不会在这些迭代上执行上述检查,而且他们知道这种扩展将对他们自己对诸如for…in之类的迭代器的使用产生什么影响)。


它只能应用于一个数组吗? - dramasea
4
for in循环可用于任何对象,但不应用于普通数组。 - SLaks

1

首先,您需要创建一个具有3个项目的对象(而不是数组)

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

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

这就是JavaScript构造 [ for (variable in object) expression ] 的用途:
variable将设置为对象的第一个属性,然后是第二个属性,最后是最后一个属性。试试

  for (v in mycars) alert(v);

观察它的工作方式,还有这个。

  for (v in mycars) alert("Property: "+v+", value: "+mycars[v]);

你不应该倡导使用 for..in 循环遍历 Array - Phrogz

0

for ... in的结构对右侧对象中的每一个元素进行迭代。在您的情况下,for语句下面的块针对mycars中的每一辆车执行一次。


0

for in 是一种埋下错误供后代发现的方式。正如已经大量指出的那样,如果应用于数组,则会循环遍历数组的所有元素、数组的长度以及附加到数组的任何其他数据。将其应用于普通对象更好,但仍应通过hasOwnProperty过滤索引。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接