2010-12-26 8 views
5

Dies ist eine Methode, die ich zu laufen versucht:Funktioniert die Javascript-For-In-Funktion nur mit einem Index?

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

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

Dies ergab:

0 
1 
2 

Wenn ich den Code auf diese geändert:

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

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

Es richtig die Namen zurückgegeben.

Meine Frage ist, gibt die For-in-Schleife nur einen Index in einer geordneten Weise zurück? Vielen Dank.

+0

Die einfache Antwort ist: Die for-in Geben Sie den Namen der Eigenschaften des Objekts, das Sie durchlaufen, zurück. Wenn Sie in diesem Fall cars [0] = anstelle von cars.push (...) sagen, erstellen Sie eine Eigenschaft mit dem Namen 0. Um die Werte zu durchlaufen, benötigen Sie ein for (var i = 0; i < cars.length; i ++) Alarm (Autos [i]); –

Antwort

5

Ja, es wird der Index innerhalb der Sammlungen sein.

Siehe here:

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

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

Wie Sie die Verwendung der Variablen als Index in die Sammlung sehen.

Sie können for each ... in Syntax (in Javascript 1.6 eingeführt) verwenden, die wird Iterate über Werte. Siehe here.

for each...in - ähnlich wie for...in, aber iteriert über die Werte der Eigenschaften des Objekts, anstatt die Eigenschaftsnamen selbst. (Neu in JavaScript 1.6.)

Soweit ich weiß, wird Javascript 1.6+ derzeit nur in Firefox verwendet.

+0

Soweit ich weiß, "für jeden" ist nur Firefox ... – KooiInc

+1

Schlechte Antwort ... 1. 'var x' an der Spitze ist dumm in JS 2. verwenden' ["Saab", "Volvo", " BMW "]' zum Erstellen eines Arrays sollte der 'Array'-Konstruktor vermieden werden (schauen Sie sich an, welche Parameter benötigt werden) 3.Die übliche fehlende 'hasOwnProperty' im' for ... in' –

+0

@Koolinc - IE 9 sollte auch. – Oded

1

Ja und nein. Sie gibt Indizes zurück, nicht die Werte, und sie gibt sie als Strings in Anführungszeichen zurück. "0", "1", etc ..

Die Plus-Seite davon ist, dass for in das gleiche funktioniert, wenn Sie ein Javascript-Objekt als assoziatives Array verwenden.

1

Es gibt den "Schlüssel" jedes Elements zurück. Gleiche Ergebnis wird mit einem solchen „Array“ erreicht werden:

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

Ja, wird der Wert des Iterators der Name der Eigenschaft ist. Es ist jedoch höchst verpönt, es zu verwenden, um Arrays zu überlappen. Betrachten wir zum Beispiel diese:

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

x.foo = 'bar'; 

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

Es ist für Iterieren über die Mitglieder eines Objekts bestimmt ist:

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

Weitere Informationen darüber, warum auf der YUI Blog

Verwandte Themen