ejemplos de for en javascript
La estructura de control for en javascript sirve
para iterar por un array o un objeto.
Usando for para iterar un array:
Este es uno de los usos clásicos de for conocido
muchas veces como una expresión idiomática común en lenguajes como
C o C++.
var arr = [1,2,3,4,5,6];
var arrLen = arr.length;
for(var i = 0; i < arrLen; i++) {
log('El valor de arr['+i+'] = ' + arr[i]);
}
El cuerpo de la sentencia for que está entre llaves se
ejecutará mientras sea la condición i < arrLen sea
verdadera. La primera expresión que inicializa var i =
0 se ejecuta una sola vez, y la última
expresión i++ es ejecutada por cada iteración.
ATENCIÓN NO SE RECOMIENDA USAR ESTA FORMA.
Otra forma problemática que puede tomar la
expresión for para iterar un array es:
var arr = [1,2,3,4,5,6];
for(var i in arr) {
log('El valor de arr['+i+'] = ' + arr[i]);
}
El operador in hace que la variable i
tome el valor de los índices del array, pero esto no siempre
sucedera como esperamos. Veamos algunos ejemplos en los que los
resultados con el uso de for in y sin in
varían.
var arr = []; // declaramos un array vacío.
arr[5] = 'Valor del indice 5'; // asignamos en el elemento 5 un valor.
log('El length del array es: ' + arr.length);
for(var i ; i < arr.legnth ; i++) { // se ejecutan 5 iteraciones
log('[POR for normal] El valor de arr['+i+'] = ' + arr[i]);
}
for(var i in arr) { // sólo ejecuta una iteración
log('[POR for in] El valor de arr['+i+'] = ' + arr[i]);
}
Otro problema que puede surgir por el uso de for
in es que itere sobre propiedades inesperadas. Esto sucede
porque los prototipos de arrays en Javascript pueden ser
modificados (pueden agregarse propiedades). Este problema se
ilustra en el siguiente ejemplo:
// se modifica el prototipo de array
// para que incluya un métodos llamado `ultimo`
Array.prototype.ultimo = function () {
return this[this.length-1];
};
for (var i in []) { // en un array vacio
// nos va a listar la propiedad `ultimo`
// en nuestro array vacio
log(i);
}
// Una forma de evitar este problema es utilizar
// el método hasOwnProperty que verifica si una
// propiedad es propia del objeto y no heredada
// por su prototipo.
var arr = [];
for (var i in arr) {
if (arr.hasOwnProperty(i)) {
log(i); // en este caso no se ejecuta.
}
}

0 comentarios:
Publicar un comentario