2011-08-21 31 views
23

Mã sau thực hiện chính xác điều tương tự. Có sự khác biệt giữa for eachfor (... in ...) không?AS3 - cho (... trong ...) so với mỗi (... trong ...)

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

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

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

Giống như "cho (... trong ...) hơn cho mỗi (... trong ...)" – BoltClock

Trả lời

69

Không, họ làm không làm điều tương tự.

Kết quả của vòng lặp for..in của bạn là

0 
1 
2 

Trong khi đầu ra của bạn cho vòng lặp each..in là

1 
2 
3 

Một for..in lặp lặp qua các các khóa/chỉ mục của một mảng hoặc tên thuộc tính của một đối tượng. A cho mỗi vòng lặp..in lặp qua các giá trị . Bạn sẽ có được kết quả trên vì mảng bar bạn có cấu trúc như thế này:

bar[0] = 1; 
bar[1] = 2; 
bar[2] = 3; 
9

Một số sự nhầm lẫn ở đây là bạn đang sử dụng các số trong mảng của bạn. Hãy chuyển sang chuỗi và xem điều gì xảy ra.

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

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

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

Bây giờ đầu ra của bạn là:

0 
1 
2 
x 
y 
z 

Như bạn thấy, cho-in vòng trên chỉ số (hoặc phím), và for-each-in vòng trên giá trị.