2009-07-03 3 views
2

Ok, j'ai ce code:Javascript pour/en boucle par des propriétés, pas d'index et renvoie des chaînes

var room = [ { time: 0, people: 0 } ]; 

puis:

time = 5; 
for(var i in room) { 
    if(room[i].time < time){ 
    spliceIndex = i + 1; 
    } 
} 
console.log(spliceIndex); 

Et la console lit comme suit: 01 - ce qui signifie que 1 est concaténé ce qui signifie en outre que i est une chaîne, et non un entier comme prévu. Casting l'index à l'entier fixé les problèmes, mais je me cognais la tête pendant des heures .... Quelqu'un peut-il expliquer pourquoi cela se passe-t-il? Parce que je reçois cela sur Firefox 3.5 et Safari 4.

+1

Pas une réponse à votre question, mais vous pouvez utiliser hasOwnProperty dans votre pour ... dans les boucles: http://stackoverflow.com/questions/85992/how-do-i-enumerate-the-properties-of -a-javascript-object –

Répondre

13

Comme les propriétés de l'objet listes de for-in, pas les index de tableau. Les propriétés d'objet sont des chaînes et les index de tableau apparaissent en tant que propriétés, seules les chaînes numériques sont utilisées.

+0

:) personne n'a dit que dans les livres javascipt j'ai lu. Merci. – disc0dancer

+1

C'est pourquoi ce n'est pas une bonne idée d'utiliser une boucle "for in" sur les tableaux. Ils parcourent toutes * les * propriétés du tableau (à l'exception des propriétés intégrées, qui ne sont pas énumérables), y compris les propriétés de chaîne et les propriétés héritées de Array.prototype. –

Questions connexes