2009-03-11 62 views
6

¿Cuál es la diferencia entre for..in y for each..in statements en javascript? ¿Hay una diferencia sutil que no sé o es la misma y cada navegador tiene un nombre diferente para ella?¿Cuál es la diferencia entre for..in y for each..in en javascript?

+0

Esto está desaprobado por [¿Cuál es la diferencia entre 'for ... in' y' for ... of' in javascript?] (Http://stackoverflow.com/q/29285897/1048572) – Bergi

Respuesta

12

"para cada uno ... en" itera sobre una variable especificada 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 

Source

"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; 
} 

Source


Nota 03,2013, for each... in bucles son deprecated. La sintaxis 'nueva' recomendada por MDN es for... of.

+0

¿Es específico este navegador? –

+0

@Vijay: sí - se introdujo en JavaScript 1.6, es decir, una extensión de Mozilla – Christoph

2

Lea la excelente documentación de MDC.

El first es para el bucle normal de colecciones y arbitrariamente sobre las propiedades de un objeto.

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

A para ... en el 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 bucle 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 añadidas al objeto sobre el que se produce 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, que no sea la propiedad que se está visitando actualmente; no se garantiza si se visitará o no una propiedad adicional, si se visitará una propiedad modificada antes o después de modificarla, o si se visitará una propiedad eliminada antes de que se elimine.

El latter le permite recorrer las 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 especificada.

7

Esta demostración debería ilustrar 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" 
} 
2

Además de las otras respuestas, tenga en cuenta que for each...in no es parte del estándar ECMA y además no está incluido en el upcoming edition 3.1. Fue introducido en JavaScript 1.6, que es extension of ECMAScript3 por la Fundación Mozilla.

De acuerdo con la página de Wikipedia vinculada, solo se implementa en Firefox 1.5+ y Safari 3.x (+?).

+0

En otras palabras, es "Firefox solamente". –

Cuestiones relacionadas