2015-08-02 27 views
5

Theo JSLint nó được khuyến khích để khai báo cho vòng lặp theo cách sau:JSLint khai báo vòng lặp

for(var i = 0, length = data.length; i < length; i+=1){...} 

sự khác biệt giữa i++i+=1 trong bối cảnh này là gì?

Mọi trợ giúp sẽ được đánh giá cao!

+1

Không có sự khác biệt. – HashPsi

+1

JSLint nói điều này ở đâu? – Scimonster

+5

Douglas Crawford ghét ++ - đó là lý do tại sao jslint yêu cầu bạn sử dụng ký tự thừa trong mã của bạn - nghiêm túc, trong ngữ cảnh này lý do duy nhất không sử dụng ++ là do Douglas Crawford nói không! –

Trả lời

2

Hoàn toàn không có sự khác biệt. Nhưng nếu bạn sử dụng i++ bạn sẽ lưu một byte. Và nếu bạn bỏ qua tuyên bố length bạn sẽ tiết kiệm nhiều hơn.

Vì vậy .. Tôi không thấy lý do bạn sử dụng theo cách đó. Đây là cách tôi luôn luôn làm điều đó:

for (var i = 0; i < arr.length; i++) { 
    ... 
} 

Về chủ đề của tiết kiệm byte ở đây, nếu vòng lặp của bạn trông như thế này:

for (var i = 0; i < arr.length; i++) { 
    var e = arr[i]; 
} 

Bạn cũng có thể làm điều này:

for (var i = 0; i < arr.length;) { 
    var e = arr[i++]; 
} 

Bạn cũng có thể làm điều này:

arr.forEach(function(e) { 
    // ... 
}); 

T giả định của bạn, bạn không cần sử dụng chỉ mục của e.

+0

Một số lời khuyên xấu (sử dụng '++' vì nó lưu một ký tự;' arr [i ++] '), và một số lời khuyên tốt (sử dụng' forEach') – 1983

+0

Nó không phụ thuộc vào những gì bạn đang sử dụng 'i' và' e' cho? Tại sao không lưu một byte? – towerofnix

3

Không có sự khác biệt về chức năng trong ngữ cảnh này. Tuy nhiên ++-- có thể là nguồn gốc của các lỗi bằng cách làm phức tạp mã và gây ra các lỗi off-by-one (sự lộn xộn và sự nhầm lẫn hậu kỳ). Do đó JSLint khuyến cáo không nên sử dụng cấu trúc này.

JSLint không cho bạn biết mã của bạn có chức năng sai, nó chỉ ra rằng có một cách khác để viết nó tránh được những cạm bẫy phổ biến. Trong thực tế, phiên bản mới nhất của JSLint sẽ khuyên bạn không nên sử dụng for vì tất cả các phương thức ví dụ như forEachmap nên được ưu tiên (rõ ràng là có cờ để tắt tính năng này khi cần thiết).

Điều này và các đề xuất khác được giải thích trong JSLint instructions.

Các vấn đề liên quan