6/01/2011

case en java

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:

Juga al truco peronista