2011-07-06 11 views
9

Duplicar posibles:
Why avoid increment (“++”) and decrement (“--”) operators in JavaScript?Otras maneras de incrementar una variable en JavaScript

Soy un gran fan de Douglas Crockford y su excelente libro, JavaScript: The Good Parts. También utilizo su herramienta JSLint cada hora antes de registrar cualquier código en nuestro repositorio, como es lógico.

Una cosa que he notado al ejecutar código a través de JSLint es su insistencia en que el operador de incremento ++ es de alguna manera malvado. Sé que puedo rechazar ciertas reglas, pero eso es hacer trampa;). Crockford menciona su desagrado en la página 112 de JS: TGP ...

En mi propia práctica, he observado que cuando utilicé ++ y -, mi código tendía a ser demasiado apretado, demasiado complicado, demasiado críptica . Entonces, como una cuestión de disciplina, ya no los uso. Creo que como resultado, mi estilo de codificación se ha vuelto más limpio.

Eso es todo muy encantador, pero no da ningún ejemplo de cómo los codifica ahora. Asumo que está haciendo algo como ...

var i; 
i = 0; 
i = i + 1; 

Una vez más, grande, pero tengo unos cuantos básica '' para los bucles en mi código JS, como me imagino que muchas personas tienen, y yo siempre he usado la sintaxis estándar ...

for (i = 0; i < myArray.length; i++) { 
    // Loop Stuff 
} 

¿Falta algo? ¿Cuál es la forma más limpia y/o mejor para incrementar/disminuir?

+4

FWIW, 'i + = 1' también es una opción ... –

+0

@gnur - Tienes razón; mis disculpas. Me perdí esa cuando estaba buscando antes de publicar. Por favor eliminar según corresponda. –

+0

No creo que haya encontrado el operador '+ =' en JS. O me falta algo. –

Respuesta

13

Creo que esto es bastante controvertido, y yo personalmente me atengo a i++ en loops. De cource, puede reemplazarlo con i = i + 1 en su declaración de ciclo, para cumplir con JSLint.

No hay alternativas reales para incrementar y disminuir los valores numéricos en JavaScript. A menudo puede usar Array.forEach() y/o Object.keys() para evitar índices numéricos.

0

En C/C++ esto es importante, especialmente con los iteradores arbitrarios y la semántica de incremento pre/post. Además, acceso aleatorio vs iteradores de ida.

En Javascript se trata más sobre la estética que cualquier otra cosa. A menos que estés lidiando con cadenas. "1"+1 es "11".

Yo diría que ++ i es una expresión idiomática con la que vale la pena ser consistente.

JSLint está mal.

3

para pasar JSLint ahora siempre hago:

for (var i = 0; i < myArray.length; i+=1) { 
    // Loop Stuff 
} 
0

Personalmente, no veo nada de malo en las ++/- operadores de incremento y decremento. Mientras que algo como i = i + 1; puede ser más fácil para los nuevos codificadores, la práctica no es ciencia de cohetes una vez que sabes lo que los operadores representan.

0

cuanto a bucle, una idea original puede ser el uso de tales bucle para evitar todo tipo de números:

var a = []; 
for (var i in "  ") 
    a.push("Loop iteration here"); 
alert(a.join("\n")); 

Significado iterar sobre una cadena, no habrá cantidad de iteraciones igual a la longitud de la cadena - 5 en el ejemplo anterior.

caso de prueba en vivo: http://jsfiddle.net/vTFDP/

+0

Idea original: sí, más legible: diablos no, imagina intentar entender eso cuando empiezas .. – gnur

+0

De acuerdo con @gnur - muy creativo, ¡pero no veo que pase ninguna de nuestras revisiones de códigos en el trabajo! –

+0

@gnur Sin duda 'i ++' es el más legible y probablemente el más eficiente. Pero como algunas personas tienen caprichos extraños, mi idea sirve al propósito: truco extraño para caprichos extraños. –

4

La única cosa difícil que veo en los operadores de incremento automático/decremento (y estoy bastante sorprendido de que no hay nadie aquí señaló que fuera) es la diferencia entre el prefijo (++ i) y versiones de postfix (i ++). También creo que los operadores de autoincremento/decremento son ligeramente más eficientes, en general. Además de esto, creo que la elección se basa principalmente en la estética, especialmente en javascript.

Cuestiones relacionadas