AS3 - для (... в ...) против каждого (... в ...) - PullRequest
23 голосов
/ 21 августа 2011

Следующий код делает то же самое.Есть ли разница между for each и for (... in ...)?

var bar:Array = new Array(1,2,3);    

for (var foo in bar){
    trace(foo);
}

for each (var foo2 in bar){
    trace(foo2);
}

Ответы [ 2 ]

70 голосов
/ 21 августа 2011

Нет, они не делают то же самое.

Выход вашего цикла for..in равен

0
1
2

В то время как выход вашегодля каждого цикла ..in -

1
2
3

Цикл for..in выполняет итерацию по ключам / индексам массива или именам свойств объектаДля каждого цикла..in выполняется итерация значений .Вы получаете вышеуказанные результаты, потому что ваш массив bar структурирован так:

bar[0] = 1;
bar[1] = 2;
bar[2] = 3;
11 голосов
/ 20 апреля 2014

Некоторая путаница заключается в том, что вы используете числа в своем массиве.Давайте переключимся на строки и посмотрим, что произойдет.

var bar:Array = new Array("x", "y", "z");    

for (var foo in bar){
    trace(foo);
}

for each (var foo2 in bar){
    trace(foo2);
}

Теперь ваш вывод:

0
1
2
x
y
z

Как видите, for-in зацикливается на indexes (или ключи) и for-each-in зацикливается на значениях .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...