Javascript的'for-in'函数,只返回一个索引吗?

时间:2010-12-26 16:12:01

标签: javascript

这是我尝试运行的方法:

function SayHello() {
    cars = new Array();
    cars[0] = "Toyota";
    cars[1] = "Mitsubishi";
    cars[2] = "Honda";

    for (car in cars) {
        alert(car);
    }
}

这返回:

0
1
2

当我将代码更改为:

function SayHello() {
    cars = new Array();
    cars[0] = "Toyota";
    cars[1] = "Mitsubishi";
    cars[2] = "Honda";

    for (car in cars) {
        alert(cars[car]);
    }
}

它正确地返回了名字。

我的问题是,for-in循环是否只是有序地返回一个索引?感谢。

6 个答案:

答案 0 :(得分:9)

是的,迭代器的值是属性的名称。然而,使用它来遍历数组是非常不赞成的。例如,考虑一下:

x = ['a', 'b', 'c'];

x.foo = 'bar';

for (i in x) alert(i);  // 0, 1, 2, foo

它旨在迭代对象的成员:

x = { a : 'apple', b : 'banana', c : 'carrot' };

for (i in x) {
    // and it's best to check that the property actually exists
    // on this object, not just on one of its prototypal ancestors:
    if (x.hasOwnProperty(i)) {
        alert(i);  // 'a', 'b', 'c'
    }
}

有关YUI Blog

上原因的详细信息

答案 1 :(得分:5)

是的,它将是集合中的索引。

请参阅here

var mycars = ["Saab", "Volvo", "BMW"];

for (var car in mycars)
{
  document.write(mycars[car] + "<br />");
}

如您所见,使用变量作为集合的索引。

您可以使用迭代值的for each ... in语法(在Javascript 1.6中引入)。请参阅here

  

for each...in - 与for...in类似,但迭代对象属性的值,而不是属性名称本身。 (JavaScript 1.6中的新功能。)

据我所知,Javascript 1.6+目前仅在Firefox中使用。

答案 2 :(得分:1)

是和否。它返回索引而不是值,并将它们作为带引号的字符串返回。 “0”,“1”等。

如果你使用javascript对象作为关联数组,那么for in的工作原理是相同的。

答案 3 :(得分:1)

返回每个项目的“键”。使用这种“阵列”将获得相同的结果:

cars = {0: "Toyota", 1: "Mitsubishi", 2: "Honda"};

答案 4 :(得分:1)

for...in-迭代对象所有由字符串键入的可枚举属性(对于简单数组,它返回元素的索引)。

for...of-迭代属性值,但仅可用于可迭代类型:内置String,Array,类似数组的对象(例如,参数或NodeList),TypedArray ,地图,集合和用户定义的可迭代项(不适用于通用对象)。

答案 5 :(得分:0)

将常规用于...

for (var i = 0; i < cars.length; i++) {
   let car = cars[i];
   // Do what you want from here
}