2010-12-26 13 views
5

Este es un método Traté de correr:¿La función Javascript para entrada devuelve solo un índice?

function SayHello() { 
    cars = new Array(); 
    cars[0] = "Toyota"; 
    cars[1] = "Mitsubishi"; 
    cars[2] = "Honda"; 

    for (car in cars) { 
     alert(car); 
    } 
} 

Este devueltos:

0 
1 
2 

Cuando cambié el código para esto:

function SayHello() { 
    cars = new Array(); 
    cars[0] = "Toyota"; 
    cars[1] = "Mitsubishi"; 
    cars[2] = "Honda"; 

    for (car in cars) { 
     alert(cars[car]); 
    } 
} 

Volvió los nombres correctamente.

Mi pregunta es, ¿el bucle for-in simplemente devuelve un índice de manera ordenada? Gracias.

+0

La respuesta es simple: El para-in devuelve el nombre de las propiedades del objeto que estás iterando. En este caso, cuando dices cars [0] = en lugar de cars.push (...) estás creando una propiedad cuyo nombre es 0. Para recorrer los valores a los que necesitarías a para (var i = 0; i < cars.length; i ++) alert (cars [i]); –

Respuesta

5

Sí, será el índice dentro de las colecciones.

Ver here:

var mycars = ["Saab", "Volvo", "BMW"]; 

for (var car in mycars) 
{ 
    document.write(mycars[car] + "<br />"); 
} 

Como se puede ver, el uso de la variable como un índice en la colección.

Puede usar la sintaxis for each ... in (presentada en Javascript 1.6) que va a iterar sobre los valores. Ver here.

for each...in - similar a for...in, pero itera sobre los valores de las propiedades del objeto, en lugar de los nombres de las propiedades mismos. (Nuevo en JavaScript 1.6.)

Por lo que sé, Javascript 1.6+ solo se usa en Firefox en este momento.

+0

Por lo que sé, 'para cada' es solo Firefox ... – KooiInc

+1

Mala respuesta ... 1. 'var x' en la parte superior es estúpido en JS 2. use' ["Saab", "Volvo", " BMW "]' para crear un Array, el constructor 'Array' debe evitarse (eche un vistazo a los parámetros que necesita) 3.La habitual falta 'hasOwnProperty' en el' for ... in' –

+0

@Koolinc - IE 9 debería también. – Oded

1

Sí y no. Devuelve índices, no los valores, y los devuelve como cadenas entre comillas. "0", "1", etc.

El lado positivo de esto es que for in funciona igual si utiliza un objeto javascript como matriz asociativa.

1

Devuelve la "clave" de cada elemento. El mismo resultado se logrará con tales "matriz":

cars = {0: "Toyota", 1: "Mitsubishi", 2: "Honda"}; 
8

Sí, el valor del iterador es el nombre de la propiedad. Sin embargo, es altamente desaconsejable usarlo para recorrer las matrices. Por ejemplo, considere esto:

x = ['a', 'b', 'c']; 

x.foo = 'bar'; 

for (i in x) alert(i); // 0, 1, 2, foo 

Está pensado para iterar sobre los miembros de un objeto:

x = { a : 'apple', b : 'banana', c : 'carrot' }; 

for (i in x) { 
    // and it's best to check that the property actually exists 
    // on this object, not just on one of its prototypal ancestors: 
    if (x.hasOwnProperty(i)) { 
     alert(i); // 'a', 'b', 'c' 
    } 
} 

Más información acerca de por qué en el YUI Blog

Cuestiones relacionadas