2015-08-02 14 views
5

Secondo JSLint si consiglia di dichiarare per il ciclo nel modo seguente:JSLint per la dichiarazione ciclo

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

Qual è la differenza tra i++ e i+=1 in questo contesto?

Qualsiasi aiuto sarà apprezzato!

+1

Non c'è differenza. – HashPsi

+1

Dove dice questo JSLint? – Scimonster

+5

Douglas Crawford odia ++ - ecco perché jslint ti dice di usare un carattere extra nel tuo codice - seriamente, in questo contesto l'unica ragione per non usare ++ è perché Douglas Crawford dice di non farlo! –

risposta

2

Non c'è assolutamente alcuna differenza. Ma se usi i++ salvi un byte. E se salti dichiarando length risparmierai ancora di più.

Quindi .. Non vedo perché lo useresti in quel modo. Ecco come lo faccio sempre:

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

Sul tema del risparmio byte qui, se il ciclo è simile al seguente:

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

Si potrebbe anche fare questo:

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

È Potrebbe anche fare questo:

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

T suppone che tu non abbia bisogno di usare l'indice di e.

+0

Alcuni consigli sbagliati (usa '++' perché salva un carattere; 'arr [i ++] '), e qualche buon consiglio (usa' forEach'). – 1983

+0

Non dipende da cosa stai usando 'i' e' e' for? Perché non salvare un byte? – towerofnix

3

Non c'è alcuna differenza funzionale in questo contesto. Tuttavia, ++ e -- possono essere una fonte di bug, complicando il codice e causando errori off-by-one (confusione preincremento e postincremento). Quindi JSLint raccomanda di non utilizzare questo costrutto.

JSLint non ti sta dicendo che il tuo codice è funzionalmente sbagliato, ma fa notare che c'è un altro modo di scriverlo che evita le insidie ​​più comuni.

Infatti, la versione più recente di JSLint si consiglia di non utilizzare for affatto, perché i metodi di istanza matrice come forEach e map dovrebbe essere preferito (ovviamente c'è un flag si disattiva quando necessario).

Questo e altri consigli sono spiegati nello JSLint instructions.

Problemi correlati