Dans le code suivant, pourquoi la variable «a» fait-elle référence à l'index plutôt qu'à la valeur?Question sur la boucle for en javascript?
for (var a in Values) {
alert(Values[a]);
}
Dans le code suivant, pourquoi la variable «a» fait-elle référence à l'index plutôt qu'à la valeur?Question sur la boucle for en javascript?
for (var a in Values) {
alert(Values[a]);
}
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.
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.
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) {
..
});
Pour l'op: "Keys" est interchangeable avec l'index (0..n) si l'objet est un tableau. –
@Daniel: Sorte de. Si vous ajoutez des propriétés au tableau ou 'Array.prototype', elles seront également incluses dans la boucle. –
Merci Matthew, maintenant je comprends le design .. –