2010-02-12 29 views
8

javascript sau làm gì?Javascript - dòng này làm gì?

var groups = countrylist.split(',');  
for(var i = -1, group; group = groupsCounty[++i];){ 
    ... 
} 
+1

Có phải 'nhóm' và' nhómCounty' được cho là cùng một biến không? –

+0

Tôi rất muốn biết - tôi đang cố gắng tìm hiểu những gì bị hỏng trên trang: p – digiguru

+0

Điều đó đã bị hỏng. Thay đổi 'var groups = countrylist.split (','); ' cho' var groupsCounty = countrylist.split (', '); '. Có lẽ ai đó đã tái cấu trúc và đổi tên biến đó nhưng không hoàn thành công việc của mình. –

Trả lời

11
With i starting at -1 
increase i by 1 
get the ith element from the groupsCounty array 
if there is no such element: stop 
otherwise: assign it to group and carry on (with whatever "…" is) 

Đây là một phiên bản tối ưu hóa:

for (var i = 0; i < groupsCounty.length; i++;){ 
    var group = groupsCounty[i]; 
    … 
} 
+0

Có an toàn để lặp lại theo cách này không? (như nó hoạt động trên tất cả các trình duyệt?) – digiguru

+0

Câu hỏi của vòng lặp có thực sự tốt hơn vòng lặp for trong câu trả lời này không? Trong CPU hoặc trong bộ nhớ được sử dụng? – jpabluz

+0

@David, Có đúng không? group = groupsCounty [++ i] hơi khó hiểu với tôi –

2

Nó đang lặp qua các thành phần của nhóm sử dụng sự hiện diện của một giá trị trong nhóm làm điều kiện bảo vệ. tức là sử dụng JavaScript Truthiness để kiểm soát số lần vòng lặp lặp lại, bởi vì bảo vệ sẽ sai khi không có giá trị nào có thể được gán cho nó.

1

for loop đi qua mảng groups cho đến khi groupsCounty[++i] trả về giá trị sai.

Với việc sử dụng các từ ngữ dưới đây:

for (<initial-expression>; <condition>; <final-expression>) 

Các ban đầu thể hiệnvar i = -1, group tuyên bố các biến igroup. Đối với mỗi lần lặp, điều kiện vòng lặpgroup = groupsCounty[++i] sẽ gán giá trị mảng tiếp theo cho group. Nếu biểu thức đó sai (ví dụ: groupsCounty[++i] trả lại không xác định khi ngoài giới hạn), vòng lặp sẽ dừng. Và biểu thức cuối cùng trống rỗng khi i đã được tăng lên trong biểu thức contition.

-1

Đó là tương đương với

for (var group in groupsCounty) { 
    ... 
} 

Với giá trị gia tăng của việc có quyền truy cập vào các chỉ số (i).

+0

'nhóm' sẽ __be__ giá trị chỉ mục, sau đó bạn sẽ phải dereference mảng bằng cách sử dụng' anotherVariable = groupdCountry [group] 'để thu được giá trị. – AnthonyWJones

+1

Nó không tương đương. Vòng lặp 'for ... in' liệt kê tất cả các thuộc tính của đối tượng, bao gồm các thuộc tính được thừa hưởng từ nguyên mẫu của đối tượng, theo thứ tự không xác định. Vì vậy, bạn đã có một thứ tự vòng lặp khác nhau và các thuộc tính có khả năng được lặp lại nhiều hơn. Ngoài ra, trong ví dụ của bạn, 'nhóm' sẽ là tên thuộc tính chứ không phải giá trị thuộc tính như trong câu hỏi ban đầu. –

2

của nó làm điều này: -

var groups = countrylist.split(',');  
for(var i = 0; i < groups.length; i++) 
{ 
    var group = groups[i] 
    ... 
} 

Sự khác biệt duy nhất là ở trên là phổ biến hơn và dễ nhận biết hơn. Bạn sẽ không đăng mã trên hỏi "Điều này đang làm gì?".

Mã bạn đã đăng là một ví dụ về phát triển thông minh nhưng không nhất thiết phải thực hành mã hóa tốt.