2015-08-02 18 views
5

Nach JSLint ist es empfehlenswert, für Schleife in der folgenden Art und Weise zu erklären:JSLint für Schleife Erklärung

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

Was ist der Unterschied zwischen i++ und i+=1 in diesem Zusammenhang?

Jede Hilfe wird geschätzt!

+1

Es gibt keinen Unterschied. – HashPsi

+1

Wo sagt JSLint das? – Scimonster

+5

Douglas Crawford hasst ++ - deshalb sagt dir jslint, dass du einen zusätzlichen Charakter in deinem Code verwenden sollst - ernsthaft, in diesem Kontext ist der einzige Grund, nicht ++ zu benutzen, Douglas Crawford, der nicht zu! –

Antwort

2

Es gibt absolut keinen Unterschied. Aber wenn Sie i++ verwenden, speichern Sie ein Byte. Und wenn Sie das Deklarieren von length überspringen, sparen Sie noch mehr.

Also .. ich sehe nicht, warum Sie es so verwenden würden. Hier ist, wie ich es immer:

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

Zum Thema Bytes hier zu speichern, wenn die Schleife wie folgt aussieht:

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

Sie könnten auch dies tun:

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

Sie könnte das auch tun:

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

T er nimmt an, dass Sie nicht den Index e verwenden müssen.

+0

Einige schlechte Ratschläge (verwenden Sie '++', weil es ein Zeichen speichert; 'arr [i ++]'), und ein paar gute Ratschläge (verwenden 'forEach'). – 1983

+0

Kommt es nicht darauf an, wofür du 'i' und' e' verwendest? Warum nicht ein Byte speichern? – towerofnix

3

In diesem Zusammenhang gibt es keinen funktionalen Unterschied. ++ und -- können jedoch eine Fehlerquelle darstellen, indem sie den Code verkomplizieren und Fehler nach dem anderen verursachen (Vorinkrementierung und Post-Increment-Verwirrung). Daher empfiehlt JSLint, dieses Konstrukt nicht zu verwenden.

JSLint sagt Ihnen nicht, dass Ihr Code funktional falsch ist, es weist darauf hin, dass es einen anderen Weg gibt, es zu schreiben, der häufige Fallstricke vermeidet.

In der Tat wird die neueste Version von JSLint empfehlen gegen for überhaupt zu verwenden, da Array-Instanz Methoden wie forEach und map sollen bevorzugt werden (natürlich gibt es einen Flag dies auszuschalten, wenn erforderlich).

Diese und andere Empfehlungen sind in der JSLint instructions erläutert.