这是我尝试运行的方法:
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循环是否只是有序地返回一个索引?感谢。
答案 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
}