2011-04-27 22 views
6
myObj.FirstName = 'Phillip', 
myObj.LastName = 'Senn'; 
for (var X in myObj) // FirstName LastName 
for each (var X in myObj) // Phillip Senn 

P: Mentalmente, ¿cómo lee estas dos afirmaciones?¿Qué significa cada uno en JavaScript?

+0

IE8 no soporta 'para cada uno'. ¿Qué hay de IE9? – Hoque

Respuesta

7

El primero (for (in)) está leyendo nombres de propiedades del objeto.

Por lo que puede leerlo como para cada propiedad en myObj, asignarlo a x.

El segundo (for each (in)) está leyendo los valores de las propiedades en el objeto.

Ésta puede ser leído como para el valor de cada propiedad en myObj, asignarlo a x.

Tenga en cuenta que for each tiene compatibilidad limitada con el navegador.

También tenga en cuenta que si aparecen propiedades adicionales en for (in), es porque buscará la cadena del prototipo para propiedades enumerables adicionales (y alguien puede haber aumentado Object, por ejemplo).

Usted puede mitigar este con ...

for (var x in myObj) { 
    if (! myObj.hasOwnProperty(x)) { 
     continue; 
    } 
    // Now you are sure the property is of `myObj` 
} 

jsFiddle.

1

for (var a in b) es una forma de obtener los índices a de la matriz b. Cuando estoy murmurando para mí mismo mientras leo el código, suelo decir algo como "por cada X en myObj".

Si usa la palabra clave each, recuperará los valores del objeto (o matriz) en myObj. Si lo omite, myObj contendrá las claves (o índices de matriz).

+0

'for (in)' debe evitarse con 'Array's. – alex

+0

Es útil para matrices asociativas. –

+0

JavaScript no tiene matrices asociativas, simplemente 'Object's de las cuales se pueden establecer sus propiedades. – alex

1

for(var X in myObj)

Por cada miembro (clave) en myObj

for each(var X in myObj)

Para cada miembro de myObj, obtener su valor

1

for itera a través de los Nombres de las propiedades del obj ect mientras que for each itera a través de los valores de las propiedades.

Ver for each en MDN

Cuestiones relacionadas