2010-12-26 9 views
5

Jest to metoda Próbowałem uruchomić:Czy funkcja JavaScript "do wejścia" zwraca tylko indeks?

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

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

wrócił ten:

0 
1 
2 

Kiedy zmieniłem kod do tego:

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

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

powrócił poprawnie nazwy.

Moje pytanie brzmi, czy pętla for-in po prostu zwraca indeks w uporządkowany sposób? Dzięki.

+0

Odpowiedź jest prosta: im za-in Zwróć nazwę właściwości obiektu, który iterujesz. W tym przypadku, gdy mówisz samochody [0] = zamiast cars.push (...) tworzysz właściwość, której nazwa to 0. Aby iterować przez wartości, których potrzebujesz, dla (var i = 0; i < cars.length; i ++) alert (cars [i]); –

Odpowiedz

5

Tak, będzie to indeks w kolekcjach.

Zobacz here:

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

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

Jak widać, użycie zmiennej jako wskaźnik do kolekcji.

Możesz użyć składni for each ... in (wprowadzone w JavaScript 1.6), że będzie iterować wartości. Zobacz here.

for each...in - podobny do for...in, ale iteracje nad wartościami właściwości obiektu, a nie same nazwy właściwości. (Nowość w JavaScript 1.6.)

O ile mi wiadomo, JavaScript 1.6+ jest obecnie używany tylko w Firefoksie.

+0

O ile mi wiadomo, "dla każdego" jest tylko Firefox ... – KooiInc

+1

Zła odpowiedź ... 1. "var x" na górze jest głupie w JS 2. użyj '[" Saab "," Volvo "," BMW "] do tworzenia tablicy, należy unikać konstruktora' Array' (spójrz na parametry, które ma) 3.Zwykle brakuje też 'hasOwnProperty' w' for ... in' –

+0

@Koolinc - IE 9. – Oded

1

Tak i nie. Zwraca indeksy, a nie wartości, i zwraca je jako cytowane ciągi. "0", "1", itd.

Dodatkową stroną tego jest to, że for in działa tak samo, jeśli obiekt javascript jest tablicą asocjacyjną.

1

Powoduje zwrócenie "klucza" każdej pozycji. Ten sam wynik zostanie osiągnięty przy takim "macierzy":

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

Tak, wartość iteratora jest nazwą właściwości. Mimo to jest bardzo marszczony, gdy używa go do pętli nad tablicami. Rozważmy na przykład w ten sposób:

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

x.foo = 'bar'; 

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

Jest on przeznaczony dla iteracji nad członkami obiektu:

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' 
    } 
} 

Więcej informacji o tym, dlaczego na YUI Blog

Powiązane problemy