2010-12-30 3 views
3

quelqu'un peut expliquer comment utiliser pour ... dans la déclaration en javascript. J'avais lu l'article w3school mais je pense qu'il est pas si clear.Below est le code, s'il vous plaît expliquer:ce qui est pour .... dans la déclaration en javascript

<html> 
<body> 
<script type="text/javascript"> 
var x; 
var mycars = new Array(); 
mycars[10] = "Saab"; 
mycars[20] = "Volvo"; 
mycars[30] = "BMW"; 

for (x in mycars) 
{ 
document.write(mycars[x] + "<br />"); 
} 
</script> 
</body> 
</html> 

Répondre

6

A for in loop itérera par chaque propriété dans un objet.

Dans votre exemple, la variable x parcourt toutes les propriétés de l'objet mycars. Si vous ajoutez mycars.expensive = "Porsche";, il le trouvera également.


Notez que, comme indiqué par MDC, for in boucles devraient pas être utilisés pour une boucle à travers des réseaux ordinaires:

Bien qu'il puisse être tentant d'utiliser cela comme un moyen d'itérer sur un Array, c'est une mauvaise idée. Le for...in déclaration itère sur les propriétés définies par l'utilisateur en plus des éléments du tableau, donc si vous modifiez non entier ou les propriétés non-positives du tableau (par exemple en ajoutant une propriété "foo" à elle ou même en ajoutant une méthode ou propriété à Array.prototype), la déclaration for...in se retourne le nom de vos définis par l'utilisateur propriétés en plus des numériques index. En outre, comme l'ordre de itération est arbitraire, iterating sur un tableau ne peut pas visiter les éléments dans l'ordre numérique . Ainsi, il est préférable d'utiliser une boucle traditionnelle for avec un index numérique lorsque lors de l'itération sur des tableaux. semblables arguments peuvent être utilisés même contre en utilisant pour ... en tout (au moins sans propertyIsEnumerable() ou hasOwnProperty() chèques), puisqu'il sera également itérer sur Object.prototype (qui, bien que généralement découragé, peut, comme dans le cas de Array.prototype, être utilement étendue par l'utilisateur où sont pas préoccupations causées par espaces de noms inclusion d'autres bibliothèques qui pourrait ne pas effectuer ces contrôles sur ces itérations et où ils sont conscient de l'effet que cette extension aura sur leur propre utilisation de itérateurs tels que pour ... in).

+0

il ne peut demander à un tableau? – dramasea

+4

'pour les boucles in' peut être utilisé avec n'importe quel objet, mais ne devrait pas être utilisé pour les tableaux ordinaires. – SLaks

0

Les itère de construction sur chaque élément for ... in à l'intérieur de l'objet sur le côté droit de in. Dans votre cas, le bloc situé sous l'instruction for est exécuté une fois pour chaque voiture dans mycars.

1

D'abord, vous créez un objet avec 3 éléments (et non un tableau)

var mycars = new Object(); 
    mycars[10] = "Saab"; 
    mycars[20] = "Volvo"; 
    mycars[30] = "BMW"; 

10, 20 et 30 sont les propriétés de l'objet.
puis vous voulez naviguer dans l'objet, visiter toutes les propriétés et afficher chaque valeur associée à une propriété.

C'est là que [for (variablesinobjet) expression] javascript construction intervient:
La variable de sera réglé sur la première propriété de l'objet, puis au 2ème, puis Jusqu'au dernier. Essayez

for (v in mycars) alert(v); 

pour voir comment cela fonctionne, et cela aussi bien

for (v in mycars) alert("Property: "+v+", value: "+mycars[v]); 
+0

Vous ne devriez pas préconiser l'utilisation de 'for..in' avec' Array'. – Phrogz

+0

Copié collé le code - n'a pas vu c'était un tableau :-) Changé la réponse ... –

0

for in est une façon d'enterrer les insectes pour les générations suivantes à découvrir. Comme cela a été copieusement signalé, s'il est appliqué à un tableau, il parcourra tous les éléments du tableau, ainsi que la longueur du tableau et toutes les autres données qui seront attachées au tableau. Il est préférable de l'appliquer à un objet ordinaire, mais vous devez quand même filtrer les indices via hasOwnProperty.

Il vaut mieux utiliser une fonction de cadre fourni comme $.each de jQuery

Questions connexes