2010-09-02 7 views

Répondre

1

Pensez un tableau JavaScript comme un objet normal avec une propriété spéciale nommée length (en fait, un peu plus complexe). Ainsi, le comportement de la boucle for..in est identique que pour les autres objets:

var a = new Array(); 

a[1] = "a"; 
alert(a.length); // 2 
alert(a[0]); // undefined 

a[1000] = "b" 
alert(a.length); // 1001 


a[-1] = "c"; 
alert(a[-1]); // c 

a.abc="why not"; 

for(var key in a) 
{ 
    alert(key+"="+a[key]); 
} 
// 1=a 
// 1000=b 
// -1=c 
// abc=why not 

Notez également que vous pouvez avoir des lacunes dans votre tableau sans avoir à payer le prix de la mémoire.

10

C'est de par sa conception. Il est trivial d'obtenir une valeur dans un tableau lorsque vous connaissez sa clé, mais il est beaucoup plus difficile d'obtenir une valeur donnée. Les valeurs peuvent être dupliquées, alors comment savez-vous quelle clé devrait être utilisée? Mais une clé est unique, donc donné une clé, il n'y a qu'une seule valeur à récupérer. Ainsi, la boucle for parcourra les clés, et il est trivial d'obtenir la valeur associée.

+0

Pour l'op: "Keys" est interchangeable avec l'index (0..n) si l'objet est un tableau. –

+0

@Daniel: Sorte de. Si vous ajoutez des propriétés au tableau ou 'Array.prototype', elles seront également incluses dans la boucle. –

+0

Merci Matthew, maintenant je comprends le design .. –

0

Il existe une boucle for each...in qui fait exactement cela - énumère uniquement les valeurs. Bientôt dans un navigateur près de chez vous.

for each(var a in Values) { 
    .. 
} 

Pour les tableaux, il y a une nouvelle fonction forEach qui permet d'obtenir la même chose.

someArray.forEach(function(value) { 
    .. 
});