Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.
Resumen
La sentencia for..in itera sobre todas las propiedades de un objeto, en un orden arbitriario. Para cada una de las propiedades, se ejecuta la sentencia especificada.
Sintaxis
for (variable in objeto)sentencia
variable
- Variable que itera sobre cada propiedad, el nombre de una propiedad diferente del objeto iterado es asignada a esta variable en cada iteración. Opcionalmente se declara con la palabra clave
var
. Esta variable es local a la función, no al bucle. (En otras palabras, cuando el bucle termina, la variable tiene el valor de la última propiedad visitada).
objeto
- Objeto cuyas propiedades se iteran.
sentencia
- Una sentencia a ejecutar por cada propiedad. Para ejecutar múltiples sentencias dentro de un bucle, utilice una sentencia
block
({ ... }
) para agrupar dichas sentencias.
Descripción
Un bucle for...in
no itera sobre las propiedades integradas. Esto incluye todos los metodos de objetos como el indexOf()
de String
o el metodo Object
de Object
. Sin embargo, el bucle iterará sobre todas las propiedades definidas por el usuario (incluidas aquellas que sobreescriban las propiedades integradas).
Un bucle for...in
recorre las propiedades de un objeto con orden arbitrario. Si una propiedad se modifica en una iteración y luego se vuelve a visitar, el valor final de la propiedad será el de la última visita. Una propiedad que se borre antes de ser visitada no será visitada más tarde. Las propiedades que se añadan al objeto en la iteración que está teniendo lugar, pueden ser tanto visitadas como omitidas en la iteración. En general, lo mejor es no añadir, modificar o borrar propiedades del objeto mientras dure la iteración sobre él, salvo sean propiedades del objeto que actualmente se esta visitando en la iteración; no existen garantías sobre que una propiedad añadida vaya a ser visitada, ni de si una propiedad modificada va a ser visitada antes de que sea modificada o después, ni siquiera de que si una propiedad es borrada vaya a ser visitada antes de borrarse o después.
Aunque pueda ser tentador utilizar esto como opción para iterar sobre un Array
, es una mala idea. El for...in
itera sobre propiedades definidas por el usuario ademas de sobre los elementos del array, por lo que si modifica propiedades no positivas o no enteras (por ejemplo, añadiendole una propiedad "foo"
o incluso añadiendo un metodo o propiedad a Array.prototype
), el for...in
devolverá el nombre de dicha propiedad definida por el usuario ademas de los índices numéricos. Ademas, dado que el orden de iteración es arbitrario, la iteración sobre un array no accederá a los elementos en orden numérico. Para esto, es mejor utilizar el for tradicional con un índice numérico cuando se itere sobre arrays.
Ejemplos
Ejemplo: Usando for...in
La siguiente función toma como argumentos un objeto y el nombre de un objeto. Entonces itera sobre todas las propiedades del objeto y devuelve una cadena que lista los nombres de las propiedades y sus valores.
function mostrar_propiedades(objeto, nombreObjeto) { var resultado = ""; for (var i in objeto) { resultado += nombreObjeto + "." + i + " = " + objeto[i] + "\n"; } return resultado; }
Vea También
for each...in
– similar afor...in
, pero itera sobre los valores de las propiedades del objeto, en vez de sobre los mismos nombres de las propiedades. (Novedades en JavaScript 1.6.)for