2015-08-02 16 views
5

Według jsLint zaleca się deklarować na pętli w następujący sposób:jsLint dla deklaracji pętli

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

Jaka jest różnica między i++ i i+=1 w tym kontekście?

Każda pomoc zostanie doceniona!

+1

Nie ma różnicy. – HashPsi

+1

Skąd JSLint to mówi? – Scimonster

+5

Douglas Crawford nienawidzi ++ - dlatego jslint każe ci użyć dodatkowej postaci w swoim kodzie - poważnie, w tym kontekście jedynym powodem, dla którego nie używasz ++, jest to, że Douglas Crawford nie mówi! –

Odpowiedz

2

Nie ma absolutnie żadnej różnicy. Ale jeśli użyjesz i++, zapiszesz bajt. A jeśli pominiesz deklarowanie length, zaoszczędzisz jeszcze więcej.

Więc ... Nie rozumiem, dlaczego używałbyś tego w ten sposób. Oto jak ja zawsze zrobić:

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

Na temat zapisywania bajtów tutaj, jeśli Twój pętli wygląda następująco:

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

Można też to zrobić:

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

You może to również zrobić:

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

T zakłada, że ​​nie musisz używać indeksu z e.

+0

Pewna zła rada (użyj '++', ponieważ zapisuje jedną postać; 'arr [i ++]'), i kilka dobrych rad (użyj 'forEach'). – 1983

+0

Czy to nie zależy od tego, do czego używasz 'i' i' e'? Dlaczego nie zapisać bajtu? – towerofnix

3

Nie ma różnicy funkcjonalnej w tym kontekście. Jednak ++ i -- może być źródłem błędów poprzez komplikowanie kodu i wywoływanie błędów typu "jeden po drugim" (zamieszanie przed incydentem i pomyłki postinkowe). Dlatego JSLint zaleca, aby nie używać tej konstrukcji.

JSLint nie mówi, że Twój kod funkcjonuje nieprawidłowo, ale wskazuje, że istnieje inny sposób jego napisania, który pozwoli uniknąć typowych pułapek.

W rzeczywistości, najnowsza wersja JSLint zaleci przed użyciem for w ogóle, ponieważ powinny być preferowane metody instancji Array, takich jak forEach i map (oczywiście nie jest flaga to wyłączyć, gdy jest to konieczne).

To i inne zalecenia są wyjaśnione w JSLint instructions.