Pregunta

¿Cuál es la diferencia entre for..in y para each..in declaraciones en javascript? ¿Hay alguna diferencia sutil que no conozco o es la misma y cada navegador tiene un nombre diferente?

¿Fue útil?

Solución

" para cada ... en " itera una variable especificada sobre todos los valores de las propiedades del objeto especificado.

Ejemplo:

var sum = 0;
var obj = {prop1: 5, prop2: 13, prop3: 8};
for each (var item in obj) {
  sum += item;
}
print(sum); // prints "26", which is 5+13+8

Fuente

" para ... en " itera una variable especificada sobre todas las propiedades de un objeto, en orden arbitrario.

Ejemplo:

function show_props(obj, objName) {
   var result = "";
   for (var i in obj) {
      result += objName + "." + i + " = " + obj[i] + "\n";
   }
   return result;
}

Fuente


Nota 03.2013, para cada ... en los bucles son en desuso . La sintaxis 'nueva' recomendada por MDN es < code> para ... de .

Otros consejos

Esperamos que esta demostración ilustre la diferencia.

var myObj = {
    a : 'A',
    b : 'B',
    c : 'C'
};
for each (x in myObj) {
    alert(x);        // "A", "B", "C"
}
for (x in myObj) {
    alert(x);        // "a", "b", "c"
    alert(myObj[x]); // "A", "B", "C"
}

Lea la excelente documentación de MDC.

El primero es normal recorrer las colecciones y arbitrariamente las propiedades de un objeto.

  

A para ... en bucle no itera sobre las propiedades integradas. Estos incluyen todos los métodos integrados de objetos, como el método indexOf de String o el método toString de Object. Sin embargo, el bucle iterará sobre todas las propiedades definidas por el usuario (incluidas las que sobrescriben las propiedades integradas).

     

A para ... en bucle itera sobre las propiedades de un objeto en un orden arbitrario. Si una propiedad se modifica en una iteración y luego se visita en un momento posterior, el valor expuesto por el ciclo será su valor en ese momento posterior. Una propiedad que se elimina antes de que se haya visitado no se visitará más tarde. Las propiedades agregadas al objeto sobre el cual ocurre la iteración pueden ser visitadas u omitidas de la iteración. En general, es mejor no agregar, modificar o eliminar propiedades del objeto durante la iteración, aparte de la propiedad que se está visitando actualmente; no hay garantía de si se visitará o no una propiedad agregada, si se visitará una propiedad modificada antes o después de que se modifique, o si se visitará una propiedad eliminada antes de que se elimine.

El último le permite recorrer propiedades de un objeto.

  

Itera una variable especificada sobre todos los valores de las propiedades del objeto. Para cada propiedad distinta, se ejecuta una instrucción específica.

Además de las otras respuestas, tenga en cuenta que para cada ... en no forma parte del estándar ECMA y tampoco está incluido en próxima edición 3.1 . Fue introducido en JavaScript 1.6, que es una extensión de ECMAScript3 por la Fundación Mozilla.

Según la página de Wikipedia vinculada, solo se implementa en Firefox 1.5+ y Safari 3.x (+?).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top