Zeph Le 19/12/2010 à 12:36 Tu ne peux pas directement. Il faut se souvenir qu'en JavaScript, tu peux définir n'importe quel membre de n'importe quel objet, même s'il n'existait pas, et c'est ce que tu fais en faisant tab["Toto"] = "Tata" : tu crées une nouvelle propriété "Toto" et tu lui assignes la valeur "Tata". Mais ça ne change pas la taille du tableau pour autant, tu n'as pas ajouté un nouvel élément dans le tableau (les indices d'un tableau en JS sont obligatoirement numériques).
L'une des solutions serait de faire ça, mais je te laisse imaginer ce que ça donne au niveau performances :
[source=js]var count = 0;
for (var prop in tab)
if (tab.hasOwnProperty (prop))
++count;[/source]
Quelques remarques en vrac :
- La méthode "hasOwnProperty" permet de vérifier qu'il s'agit bien d'une propriété de ton objet tab et non d'une propriété héritée de l'un de ses parents ;
- tab["Toto"] est équivalent à tab.Toto ; si "Toto" est une constante, on préfère la deuxième écriture plus concise ;
- Pour initialiser un nouveau tableau, "[]" est la syntaxe habituelle, même si "new Array()" est toléré pour être homogène avec les autres objets (mais les tableaux sont un cas particulier en JavaScript, et ça n'est pas un sucre sur le constructeur qui va y changer grand chose) ;
- Si tu utilises ton tableau de cette manière, ça ne sert à rien d'utiliser un tableau, autant partir d'un objet vierge ("tab = {};").

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
J'usurpe le topic pour poser une question sur un autre sujet.
Je programme en ce moment sur WebOS pour le fun, j'ai cependant beaucoup de mal avec ces fonctions:
this.gotFilter = this.gotFilter.bind(this);
C'est une autoréférence? Je ne comprends pas trop l'intérêt de la chose.
Zeph Le 21/12/2010 à 18:25 bah ça dépend du contenu de "gotFilter", ça réassigne juste une nouvelle méthode dans cette propriété, après l'effet dépend complètement de l'implémentation.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)