2010-12-26 10 views
5

Si tratta di un metodo che ho provato a correre:La funzione Javascript for-in 'restituisce solo un indice?

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

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

Questo restituito:

0 
1 
2 

Quando ho cambiato il codice a questo:

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

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

E 'tornato correttamente i nomi.

La mia domanda è, il ciclo for-in restituisce un indice in modo ordinato? Grazie.

+0

La risposta è semplice: Il per-in restituisce il nome delle proprietà dell'oggetto che stai iterando. In questo caso, quando dici auto [0] = invece di cars.push (...) stai creando una proprietà il cui nome è 0. Per scorrere i valori di cui avresti bisogno per (var i = 0; i < cars.length; i ++) alert (cars [i]); –

risposta

5

Sì, sarà l'indice all'interno delle raccolte.

Vedi here:

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

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

Come si può vedere, l'uso della variabile come indice nella collezione.

È possibile utilizzare la sintassi for each ... in (introdotta in JavaScript 1.6) che sarà iterare sui valori. Vedi here.

for each...in - simile a for...in, ma itera oltre i valori delle proprietà dell'oggetto, piuttosto che i nomi delle proprietà stesse. (Novità in JavaScript 1.6.)

Per quanto ne so, Javascript 1.6+ è utilizzato solo in Firefox in questo momento.

+0

Per quanto ne so, 'per ciascuno' è solo Firefox ... – KooiInc

+1

Risposta sbagliata ... 1. 'var x' in alto è stupido in JS 2. usa' ["Saab", "Volvo", " BMW "]' per creare una matrice, il costruttore di 'Array' dovrebbe essere evitato (date un'occhiata a quali parametri ci vogliono) 3.La solita mancanza di 'hasOwnProperty' nel' for ... in' –

+0

@Koolinc - Anche IE 9 dovrebbe. – Oded

1

Sì e no. Restituisce gli indici, non i valori e li restituisce come stringhe tra virgolette. "0", "1", ecc.

Il lato positivo di questo è che for in funziona allo stesso modo se si utilizza un oggetto javascript come array associativo.

1

Restituisce la "chiave" di ciascun articolo. Stesso risultato sarà raggiunto con tale "serie":

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

Sì, il valore del iteratore è il nome della proprietà. Tuttavia, è molto malvisto usarlo per il loop su array. Ad esempio, si consideri questo:

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

x.foo = 'bar'; 

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

E 'destinato per iterare sui membri di un oggetto:

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

Maggiori informazioni sul motivo per cui sul YUI Blog

Problemi correlati