Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Différence entre Array et Objet

5 réponses
Avatar
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)

5 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 04/10/2011 20:41, Une Bévue a écrit :
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.



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'.

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;
?



Ben oui, mais le nom 'callback' a une signification spéciale pour
certains types d'objets ? Si oui, je l'ignorais.

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 ?



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).

si je fais :
var r = new Object();
r['machin'] = "truc muche";
r['bidule'] = 3.14;
r['callback'] = aFunction;

c'est tout comme nom ?



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.

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...



À priori, je pense que oui.

bon sur Object yapas length comme sur Array, j'ai créé une fonction size
pour ça qui retourne le nb de propriétés.



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).
Avatar
SAM
Le 04/10/11 20:41, Une Bévue a écrit :
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;



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]);

déjà est-ce que je peux faire :

r['callback'] = aFunction;



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à !)

si je fais :
var r = new Object();
r['machin'] = "truc muche";
r['bidule'] = 3.14;
r['callback'] = aFunction;

c'est tout comme nom ?



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);

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...



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);


Je ne ferai ce changement qu'à condition d'être assuré que je puisse
utiliser :
cat = r['cat'];



le contraire, non ?

et :
for (var key in r) 5...

de la même manière que r soit une Array ou un Object...



non .. ça ça m'étonnerait

bon sur Object yapas length comme sur Array, j'ai créé une fonction size
pour ça qui retourne le nb de propriétés.



et ????

--
Stéphane Moriaux avec/with iMac-intel
Avatar
unbewusst.sein
SAM wrote:

> de la même manière que r soit une Array ou un Object...

non .. ça ça m'étonnerait



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)
Avatar
unbewusst.sein
Olivier Miakinen <om+ wrote:


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).



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 :
<ah zut je ne retrouve pas la réf de l'article...>

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)
Avatar
Mickaël Wolff
On 04/10/11 20:41, Une Bévue wrote:
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;



/! 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.