Différence entre Array et Objet
Le
unbewusst.sein

enfin, je me doute bien qu'il y a une différence entre Array et Objet,
je parle d'un point de vue très pratique.
Par exemple, je remplis une Array ainsi :
var r = [];
r['machin'] = "truc muche";
r['bidule'] = 3.14;
etc
déjà est-ce que je peux faire :
r['callback'] = aFunction;
?
si dans un Object, on utilise que des valeurs statiques (des scalaires?)
du point de vue de l'usage il n'y a pas vraiment de différence entre
Object et Array si ?
si je fais :
var r = new Object();
r['machin'] = "truc muche";
r['bidule'] = 3.14;
r['callback'] = aFunction;
c'est tout comme nom ?
Bon, en fait mon pb est que j'ai utilisé une Array et que je voudrais
passer à un Object, sans réécrire tout mon code
Je ne ferai ce changement qu'à condition d'être assuré que je puisse
utiliser :
cat = r['cat'];
et :
for (var key in r) 5
de la même manière que r soit une Array ou un Object
bon sur Object yapas length comme sur Array, j'ai créé une fonction size
pour ça qui retourne le nb de propriétés.
--
« Le temps est un grand maitre, dit-on. Le malheur est
qu'il tue ses élèves. »
(Berlioz)
je parle d'un point de vue très pratique.
Par exemple, je remplis une Array ainsi :
var r = [];
r['machin'] = "truc muche";
r['bidule'] = 3.14;
etc
déjà est-ce que je peux faire :
r['callback'] = aFunction;
?
si dans un Object, on utilise que des valeurs statiques (des scalaires?)
du point de vue de l'usage il n'y a pas vraiment de différence entre
Object et Array si ?
si je fais :
var r = new Object();
r['machin'] = "truc muche";
r['bidule'] = 3.14;
r['callback'] = aFunction;
c'est tout comme nom ?
Bon, en fait mon pb est que j'ai utilisé une Array et que je voudrais
passer à un Object, sans réécrire tout mon code
Je ne ferai ce changement qu'à condition d'être assuré que je puisse
utiliser :
cat = r['cat'];
et :
for (var key in r) 5
de la même manière que r soit une Array ou un Object
bon sur Object yapas length comme sur Array, j'ai créé une fonction size
pour ça qui retourne le nb de propriétés.
--
« Le temps est un grand maitre, dit-on. Le malheur est
qu'il tue ses élèves. »
(Berlioz)
Le 04/10/2011 20:41, Une Bévue a écrit :
D'un point de vue très pratique, et si je me rappelle bien (ma doc est
restée au boulot),
1) un Array est un Object
2) les différences de comportement doivent concerner principalement les
propriétés 'length' et '0' à '4294967295'.
Concernant le point (2), je veux dire que, par exemple, si tu assignes
r['150'] pour un Array dont r['length'] est plus petit que 151, alors
cela positionne en même temps r['length'] à 151. Inversement, si tu
fais r['length'] = 10, alors cela efface toutes les propriétés entre
'10' et '4294967295'.
Ben oui, mais le nom 'callback' a une signification spéciale pour
certains types d'objets ? Si oui, je l'ignorais.
D'après ce que je crois, que les valeurs soient 'statiques' ou pas, quel
que soit le sens que tu donnes à cet adjectif, il ne doit pas y avoir de
différence entre Object et Array, du moins tant que tu n'utilises pas
comme noms de propriétés le nom 'length' ou un entier entre 0 et 2^32-1
(transmis ou non sous forme de string).
Je suppose que tu voulais dire « c'est tou comme, non ? » et que c'est
encore ta saleté de correcteur orthographique qui a fait n'importe quoi.
Pour répondre à cette question, je dois vérifier dans la norme, mais je
suis quasiment sûr que c'est tout comme, oui.
À priori, je pense que oui.
Euh... si tu as besoin de 'length', lequel ne compte que les éléments
nommés par un nombre, attention : c'est là que tu risques d'avoir des
problèmes.
Donc, la première chose à faire, c'est de regarder si oui ou non tu as
des éléments indicés par des nombres (entiers entre 0 et 4294967295).
ben là, la longueur de l'array est 0 (zéro), il a pas bougé d'un iota
tu l'as transformé en object
enfin ... tu lui as adjoint les propriétés machin, bidule, ...
puisque, à la base, un array est d'abord un object
essayer :
var r = [5,6,7,8,9];
r['machin'] = "truc muche";
r['bidule'] = 3.14;
r['truc'] = 'vu';
alert(r.length); // 5 et non pas 3
alert(r.machin + ' != ' +r[0]);
Je pense que ça ne doit poser aucun problème.
var f = function(){alert('oui? que me veut-on ?');};
r['f'] = f;
r.f(); // keskya ? (mon php a encore merdé les charsets là !)
ben ... un object est un object, oui.
Différentes notations :
var r = {}; // new Object
r.vu = "vu"; // propriété de l'objet r
r.revu = "revu";
alert(r.vu + 'netn' + r.revu);
/* variante */
r['vu'] = "caché";
r['revu'] = 'cachés';
alert(r.vu + 'netn' + r.revu);
var a = []; // new Array
a.vu = "vus"; // propriété de l'objet a
a.revu = "revus";
alert(a.vu + 'netn' + a.revu);
a['vu'] = "caché";
a['revu'] = 'cachés';
alert(a.vu + 'netn' + a.revu);
tu peux aussi bien prendre n'importe quoi
var o = documement.getElementById('test');
if(o) {
o.vu = 'vu';
o.revu = 'revu';
}
if(o) alert(o.vu);
le contraire, non ?
non .. ça ça m'étonnerait
et ????
--
Stéphane Moriaux avec/with iMac-intel
bon, de toutes façons je serai "prudent"...
--
Je m'intéresse au futur, c'est là que je compte passer
le reste de ma vie.
(Woody Allen)
OK pour tout, merci beaucoup, pigé.
Je n'ai donc pas trop de risques (ie. modifs à faire) à passer mon Array
en Object.
en fait le truc est que j'ai pompé un js mvc :
dans la fonction principale, il y avait déjà 3 arguments, j'en ai ajouté
d'autres et pour finir j'aimerais n'en avoir plus qu'UN, sous forme
d'objet, c'est plus facile à tester le nb d'arguments effectifs dans un
objet...
--
Je m'intéresse au futur, c'est là que je compte passer
le reste de ma vie.
(Woody Allen)
/! en JS, la notation crochets ne signifie pas « accès aux éléments
d'un tableau ». Avant tout, c'est l'accès à une propriété de l'objet.
Les objets tableau ajoutent une sémantique d'accès spécifique, mais ce
n'est pas le comportement de base.