En gros, la norme dit ceci :
1) tab1["machin"] = "truc" crée une propriété de nom "machin" et de
valeur "truc" et c'est tout.
2) tab1[1000] = "truc" crée une propriété de nom "1000" et de valeur
"truc", *et* passe la valeur de la propriété "length" à 1001 (sauf
bien
sûr si elle était déjà supérieure à 1000).
3) tab1["length"] = 10 efface toutes les propriétés dont la valeur
numérique est supérieure ou égale à 10 et inférieure à la propriété
"length", puis passe la valeur de la propriété "length" à 10.
Nulle part il n'est question de créer 999 éléments nuls quand tu
ajoutes l'élément indexé par 1000 ! Et donc, pour calculer le nombre
réel d'éléments de tab1, tu dois faire comme pour tab2 : une boucle
« for (var prop in tab1) ».
Note au passage que tab1[1000] ou tab1["1000"] crée exactement la même
propriété, dont le nom est "1000" et non pas 1000.
En gros, la norme dit ceci :
1) tab1["machin"] = "truc" crée une propriété de nom "machin" et de
valeur "truc" et c'est tout.
2) tab1[1000] = "truc" crée une propriété de nom "1000" et de valeur
"truc", *et* passe la valeur de la propriété "length" à 1001 (sauf
bien
sûr si elle était déjà supérieure à 1000).
3) tab1["length"] = 10 efface toutes les propriétés dont la valeur
numérique est supérieure ou égale à 10 et inférieure à la propriété
"length", puis passe la valeur de la propriété "length" à 10.
Nulle part il n'est question de créer 999 éléments nuls quand tu
ajoutes l'élément indexé par 1000 ! Et donc, pour calculer le nombre
réel d'éléments de tab1, tu dois faire comme pour tab2 : une boucle
« for (var prop in tab1) ».
Note au passage que tab1[1000] ou tab1["1000"] crée exactement la même
propriété, dont le nom est "1000" et non pas 1000.
En gros, la norme dit ceci :
1) tab1["machin"] = "truc" crée une propriété de nom "machin" et de
valeur "truc" et c'est tout.
2) tab1[1000] = "truc" crée une propriété de nom "1000" et de valeur
"truc", *et* passe la valeur de la propriété "length" à 1001 (sauf
bien
sûr si elle était déjà supérieure à 1000).
3) tab1["length"] = 10 efface toutes les propriétés dont la valeur
numérique est supérieure ou égale à 10 et inférieure à la propriété
"length", puis passe la valeur de la propriété "length" à 10.
Nulle part il n'est question de créer 999 éléments nuls quand tu
ajoutes l'élément indexé par 1000 ! Et donc, pour calculer le nombre
réel d'éléments de tab1, tu dois faire comme pour tab2 : une boucle
« for (var prop in tab1) ».
Note au passage que tab1[1000] ou tab1["1000"] crée exactement la même
propriété, dont le nom est "1000" et non pas 1000.
[...]
ben ... un exemple de Json tu en as un ici :
<4ba1f172$0$2874$
en gros : un objet d'objets d'objets et d'arrays
(le plus souvent (toujours ?) servi sous forme d'un string
que des fonctions Json (en JS) traduisent à grd' renfort d'eval)
On voit dans cet exemple qu'il y a xxx modèles (de voitures)
avec xx options chacun
que pour chaque modèle (propriété de l'objet général)
les xx options (propriétés du modèle) sont énumérées même quand elles
n'existent pas
que certaines options sont elles-mêmes des arrays
Le truc re-développé fait dans les 800-900 lignes (1 prop par ligne)
[...]
le pb de l'OP fut des erreurs de quotage dans les valeurs des prop qui
sont des strings (on n'sait plus où on en est des ' " ' ")
une kkdouille côté serveur quoi.
Voyons ce que dit la norme.
http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf
[...]
En gros, cela dit ceci :
1) tab1["machin"] = "truc" crée une propriété de nom "machin" et de
valeur "truc" et c'est tout.
2) tab1[1000] = "truc" crée une propriété de nom "1000" et de valeur
"truc", *et* passe la valeur de la propriété "length" à 1001 (sauf bien
sûr si elle était déjà supérieure à 1000).
3) tab1["length"] = 10 efface toutes les propriétés dont la valeur
numérique est supérieure ou égale à 10 et inférieure à la propriété
"length", puis passe la valeur de la propriété "length" à 10.
Là, au (3), même en fr j'ai rien compris !
Note au passage que tab1[1000] ou tab1["1000"] crée exactement la même
propriété, dont le nom est "1000" et non pas 1000.
donc
if(tab1.1000 == 'truc') alert('Banco !');
oui ?
[...]
ben ... un exemple de Json tu en as un ici :
<4ba1f172$0$2874$426a74cc@news.free.fr>
en gros : un objet d'objets d'objets et d'arrays
(le plus souvent (toujours ?) servi sous forme d'un string
que des fonctions Json (en JS) traduisent à grd' renfort d'eval)
On voit dans cet exemple qu'il y a xxx modèles (de voitures)
avec xx options chacun
que pour chaque modèle (propriété de l'objet général)
les xx options (propriétés du modèle) sont énumérées même quand elles
n'existent pas
que certaines options sont elles-mêmes des arrays
Le truc re-développé fait dans les 800-900 lignes (1 prop par ligne)
[...]
le pb de l'OP fut des erreurs de quotage dans les valeurs des prop qui
sont des strings (on n'sait plus où on en est des ' " ' ")
une kkdouille côté serveur quoi.
Voyons ce que dit la norme.
http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf
[...]
En gros, cela dit ceci :
1) tab1["machin"] = "truc" crée une propriété de nom "machin" et de
valeur "truc" et c'est tout.
2) tab1[1000] = "truc" crée une propriété de nom "1000" et de valeur
"truc", *et* passe la valeur de la propriété "length" à 1001 (sauf bien
sûr si elle était déjà supérieure à 1000).
3) tab1["length"] = 10 efface toutes les propriétés dont la valeur
numérique est supérieure ou égale à 10 et inférieure à la propriété
"length", puis passe la valeur de la propriété "length" à 10.
Là, au (3), même en fr j'ai rien compris !
Note au passage que tab1[1000] ou tab1["1000"] crée exactement la même
propriété, dont le nom est "1000" et non pas 1000.
donc
if(tab1.1000 == 'truc') alert('Banco !');
oui ?
[...]
ben ... un exemple de Json tu en as un ici :
<4ba1f172$0$2874$
en gros : un objet d'objets d'objets et d'arrays
(le plus souvent (toujours ?) servi sous forme d'un string
que des fonctions Json (en JS) traduisent à grd' renfort d'eval)
On voit dans cet exemple qu'il y a xxx modèles (de voitures)
avec xx options chacun
que pour chaque modèle (propriété de l'objet général)
les xx options (propriétés du modèle) sont énumérées même quand elles
n'existent pas
que certaines options sont elles-mêmes des arrays
Le truc re-développé fait dans les 800-900 lignes (1 prop par ligne)
[...]
le pb de l'OP fut des erreurs de quotage dans les valeurs des prop qui
sont des strings (on n'sait plus où on en est des ' " ' ")
une kkdouille côté serveur quoi.
Voyons ce que dit la norme.
http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf
[...]
En gros, cela dit ceci :
1) tab1["machin"] = "truc" crée une propriété de nom "machin" et de
valeur "truc" et c'est tout.
2) tab1[1000] = "truc" crée une propriété de nom "1000" et de valeur
"truc", *et* passe la valeur de la propriété "length" à 1001 (sauf bien
sûr si elle était déjà supérieure à 1000).
3) tab1["length"] = 10 efface toutes les propriétés dont la valeur
numérique est supérieure ou égale à 10 et inférieure à la propriété
"length", puis passe la valeur de la propriété "length" à 10.
Là, au (3), même en fr j'ai rien compris !
Note au passage que tab1[1000] ou tab1["1000"] crée exactement la même
propriété, dont le nom est "1000" et non pas 1000.
donc
if(tab1.1000 == 'truc') alert('Banco !');
oui ?
[...]
Toutefois, si j'écris:
tab = [ ];
tab[10] = true;
alert(tab);
j'obtiens:
[,,,,,,,,,true]
Note au passage que tab1[1000] ou tab1["1000"] crée exactement la même
propriété, dont le nom est "1000" et non pas 1000.
Oui, du coup on peut écrire:
tab1 = [ 1,2 ];
tab2 = [ ];
tab2[ tab1] = true;
cela fonctionne correctement.
Mais :
for (var prop in tab2) {
alert( typeof(prop) +'_'+ prop );
}
va afficher : String_[1,2]
Ainsi, la propriété a perdu son été de "Array"...
[...]
Toutefois, si j'écris:
tab = [ ];
tab[10] = true;
alert(tab);
j'obtiens:
[,,,,,,,,,true]
Note au passage que tab1[1000] ou tab1["1000"] crée exactement la même
propriété, dont le nom est "1000" et non pas 1000.
Oui, du coup on peut écrire:
tab1 = [ 1,2 ];
tab2 = [ ];
tab2[ tab1] = true;
cela fonctionne correctement.
Mais :
for (var prop in tab2) {
alert( typeof(prop) +'_'+ prop );
}
va afficher : String_[1,2]
Ainsi, la propriété a perdu son été de "Array"...
[...]
Toutefois, si j'écris:
tab = [ ];
tab[10] = true;
alert(tab);
j'obtiens:
[,,,,,,,,,true]
Note au passage que tab1[1000] ou tab1["1000"] crée exactement la même
propriété, dont le nom est "1000" et non pas 1000.
Oui, du coup on peut écrire:
tab1 = [ 1,2 ];
tab2 = [ ];
tab2[ tab1] = true;
cela fonctionne correctement.
Mais :
for (var prop in tab2) {
alert( typeof(prop) +'_'+ prop );
}
va afficher : String_[1,2]
Ainsi, la propriété a perdu son été de "Array"...
Le 25/03/2010 03:32, SAM a écrit :[...]
ben ... un exemple de Json tu en as un ici :
<4ba1f172$0$2874$
en gros : un objet d'objets d'objets et d'arrays
(le plus souvent (toujours ?) servi sous forme d'un string
que des fonctions Json (en JS) traduisent à grd' renfort d'eval)
Ok, je comprends, ou du moins je le suppose.
que pour chaque modèle (propriété de l'objet général)
les xx options (propriétés du modèle) sont énumérées même quand elles
n'existent pas
que certaines options sont elles-mêmes des arrays
Le truc re-développé fait dans les 800-900 lignes (1 prop par ligne)
Je n'arrive pas à voir ici d'exemple de tableau avec des index non
renseignés.
En fait, ce qu'il faudrait, c'est voir si un tableau ne
contenant qu'une entrée numérotée 2, se retrouve après sérialisation
puis désérialisation avoir trois entrées numérotées 0, 1 et 2.[...]
Là, au (3), même en fr j'ai rien compris !
Voici un petit exemple testé sur http://writecodeonline.com/javascript/
On voit que diminuer tab1.length (ou tab1['length'] ce qui revient au
même) efface réellement les propriétés dont le nom est un nombre plus
petit que le nouveau tab1.length, mais ça ne touche pas aux propriétés
dont le nom n'est pas un nombre.
Le 25/03/2010 03:32, SAM a écrit :
[...]
ben ... un exemple de Json tu en as un ici :
<4ba1f172$0$2874$426a74cc@news.free.fr>
en gros : un objet d'objets d'objets et d'arrays
(le plus souvent (toujours ?) servi sous forme d'un string
que des fonctions Json (en JS) traduisent à grd' renfort d'eval)
Ok, je comprends, ou du moins je le suppose.
que pour chaque modèle (propriété de l'objet général)
les xx options (propriétés du modèle) sont énumérées même quand elles
n'existent pas
que certaines options sont elles-mêmes des arrays
Le truc re-développé fait dans les 800-900 lignes (1 prop par ligne)
Je n'arrive pas à voir ici d'exemple de tableau avec des index non
renseignés.
En fait, ce qu'il faudrait, c'est voir si un tableau ne
contenant qu'une entrée numérotée 2, se retrouve après sérialisation
puis désérialisation avoir trois entrées numérotées 0, 1 et 2.
[...]
Là, au (3), même en fr j'ai rien compris !
Voici un petit exemple testé sur http://writecodeonline.com/javascript/
On voit que diminuer tab1.length (ou tab1['length'] ce qui revient au
même) efface réellement les propriétés dont le nom est un nombre plus
petit que le nouveau tab1.length, mais ça ne touche pas aux propriétés
dont le nom n'est pas un nombre.
Le 25/03/2010 03:32, SAM a écrit :[...]
ben ... un exemple de Json tu en as un ici :
<4ba1f172$0$2874$
en gros : un objet d'objets d'objets et d'arrays
(le plus souvent (toujours ?) servi sous forme d'un string
que des fonctions Json (en JS) traduisent à grd' renfort d'eval)
Ok, je comprends, ou du moins je le suppose.
que pour chaque modèle (propriété de l'objet général)
les xx options (propriétés du modèle) sont énumérées même quand elles
n'existent pas
que certaines options sont elles-mêmes des arrays
Le truc re-développé fait dans les 800-900 lignes (1 prop par ligne)
Je n'arrive pas à voir ici d'exemple de tableau avec des index non
renseignés.
En fait, ce qu'il faudrait, c'est voir si un tableau ne
contenant qu'une entrée numérotée 2, se retrouve après sérialisation
puis désérialisation avoir trois entrées numérotées 0, 1 et 2.[...]
Là, au (3), même en fr j'ai rien compris !
Voici un petit exemple testé sur http://writecodeonline.com/javascript/
On voit que diminuer tab1.length (ou tab1['length'] ce qui revient au
même) efface réellement les propriétés dont le nom est un nombre plus
petit que le nouveau tab1.length, mais ça ne touche pas aux propriétés
dont le nom n'est pas un nombre.
Toutefois, si j'écris:
tab = [ ];
tab[10] = true;
alert(tab);
j'obtiens:
[,,,,,,,,,true]
Oui. Cela ne veut pas dire qu'il y a 11 éléments dans tab, mais juste
que la fonction d'affichage fait une boucle pour tout entier entre 0 et
length ! De même, si tu fais tab.length0, ça ne va pas te rajouter
Toutefois, si j'écris:
tab = [ ];
tab[10] = true;
alert(tab);
j'obtiens:
[,,,,,,,,,true]
Oui. Cela ne veut pas dire qu'il y a 11 éléments dans tab, mais juste
que la fonction d'affichage fait une boucle pour tout entier entre 0 et
length ! De même, si tu fais tab.length0, ça ne va pas te rajouter
Toutefois, si j'écris:
tab = [ ];
tab[10] = true;
alert(tab);
j'obtiens:
[,,,,,,,,,true]
Oui. Cela ne veut pas dire qu'il y a 11 éléments dans tab, mais juste
que la fonction d'affichage fait une boucle pour tout entier entre 0 et
length ! De même, si tu fais tab.length0, ça ne va pas te rajouter
Je crois que ça va te plaire :
<http://www.json.org/jsonfr.html>
[...]
Voici un petit exemple testé sur http://writecodeonline.com/javascript/
où tous les éléments du tableau sont des strings
On voit que diminuer tab1.length (ou tab1['length'] ce qui revient au
même) efface réellement les propriétés dont le nom est un nombre plus
petit que le nouveau tab1.length, mais ça ne touche pas aux propriétés
dont le nom n'est pas un nombre.
Je crois que j'ai un pb de vocabulaire :-(
c'est quoi 'nom' 'nombre' et 'propriété' ?
Un élément de tableau est une propriété ?
Le nom de l'élément est son index ?
Pour moi, faire tab['test'] = x;
c'est équivalent à faire tab.test = x;
ça sort complètement du tableau tab,
on lui ajoute jute une propriété en annexe.
Je pourrai l'allonger, le rétrécir, par tab.length autant que je veux
que tab.test sera toujours là et de valeur x.
Cette norme qui nous dit que les index sont des noms de propriété
ça me tue !
Je crois que ça va te plaire :
<http://www.json.org/jsonfr.html>
[...]
Voici un petit exemple testé sur http://writecodeonline.com/javascript/
où tous les éléments du tableau sont des strings
On voit que diminuer tab1.length (ou tab1['length'] ce qui revient au
même) efface réellement les propriétés dont le nom est un nombre plus
petit que le nouveau tab1.length, mais ça ne touche pas aux propriétés
dont le nom n'est pas un nombre.
Je crois que j'ai un pb de vocabulaire :-(
c'est quoi 'nom' 'nombre' et 'propriété' ?
Un élément de tableau est une propriété ?
Le nom de l'élément est son index ?
Pour moi, faire tab['test'] = x;
c'est équivalent à faire tab.test = x;
ça sort complètement du tableau tab,
on lui ajoute jute une propriété en annexe.
Je pourrai l'allonger, le rétrécir, par tab.length autant que je veux
que tab.test sera toujours là et de valeur x.
Cette norme qui nous dit que les index sont des noms de propriété
ça me tue !
Je crois que ça va te plaire :
<http://www.json.org/jsonfr.html>
[...]
Voici un petit exemple testé sur http://writecodeonline.com/javascript/
où tous les éléments du tableau sont des strings
On voit que diminuer tab1.length (ou tab1['length'] ce qui revient au
même) efface réellement les propriétés dont le nom est un nombre plus
petit que le nouveau tab1.length, mais ça ne touche pas aux propriétés
dont le nom n'est pas un nombre.
Je crois que j'ai un pb de vocabulaire :-(
c'est quoi 'nom' 'nombre' et 'propriété' ?
Un élément de tableau est une propriété ?
Le nom de l'élément est son index ?
Pour moi, faire tab['test'] = x;
c'est équivalent à faire tab.test = x;
ça sort complètement du tableau tab,
on lui ajoute jute une propriété en annexe.
Je pourrai l'allonger, le rétrécir, par tab.length autant que je veux
que tab.test sera toujours là et de valeur x.
Cette norme qui nous dit que les index sont des noms de propriété
ça me tue !
[...]
---------------------------------------------------------------------
length01
,,,,,,,,,,10,,,,,,,,,,x20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,200,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,300
tab[x]=x tab[20]=x20 tab[10] tab[-20]=x-20 tab[-10]=-10 tab[3.5]=3.5
tab[5000000000]P00000000 tab[300]00 tab[x300]=x300 tab[200] 0
tab[x200]=x200
[...]
---------------------------------------------------------------------
On y voit que :
1) tab[10] désigne la même chose que tab["10"], idem avec tab[-10] ;
2) positionner tab[300] passe tab.length à 301, mais tab[5000000000]
ne change pas tab.length (5000000000 est plus grand que 2^32) ;
3) passer tab.length à 15 supprime tab[200] et tab[300] mais pas
tab[-10] ni tab[5000000000] ;
4) de même, passer tab.length à 2 ne supprime pas tab[3.5].
[...]
---------------------------------------------------------------------
length01
,,,,,,,,,,10,,,,,,,,,,x20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,200,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,300
tab[x]=x tab[20]=x20 tab[10] tab[-20]=x-20 tab[-10]=-10 tab[3.5]=3.5
tab[5000000000]P00000000 tab[300]00 tab[x300]=x300 tab[200] 0
tab[x200]=x200
[...]
---------------------------------------------------------------------
On y voit que :
1) tab[10] désigne la même chose que tab["10"], idem avec tab[-10] ;
2) positionner tab[300] passe tab.length à 301, mais tab[5000000000]
ne change pas tab.length (5000000000 est plus grand que 2^32) ;
3) passer tab.length à 15 supprime tab[200] et tab[300] mais pas
tab[-10] ni tab[5000000000] ;
4) de même, passer tab.length à 2 ne supprime pas tab[3.5].
[...]
---------------------------------------------------------------------
length01
,,,,,,,,,,10,,,,,,,,,,x20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,200,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,300
tab[x]=x tab[20]=x20 tab[10] tab[-20]=x-20 tab[-10]=-10 tab[3.5]=3.5
tab[5000000000]P00000000 tab[300]00 tab[x300]=x300 tab[200] 0
tab[x200]=x200
[...]
---------------------------------------------------------------------
On y voit que :
1) tab[10] désigne la même chose que tab["10"], idem avec tab[-10] ;
2) positionner tab[300] passe tab.length à 301, mais tab[5000000000]
ne change pas tab.length (5000000000 est plus grand que 2^32) ;
3) passer tab.length à 15 supprime tab[200] et tab[300] mais pas
tab[-10] ni tab[5000000000] ;
4) de même, passer tab.length à 2 ne supprime pas tab[3.5].
Exemple rapide, Firefox, console, code :
var s="", a=new Array();a[1000];for(var v in a)
s+=v+"="+a[v]+",";alert(s);
ou
var s="", a=[];a[1000];for(var v in a) s+=v+"="+a[v]+",";alert(s);
donne
1000,
Exemple rapide, Firefox, console, code :
var s="", a=new Array();a[1000];for(var v in a)
s+=v+"="+a[v]+",";alert(s);
ou
var s="", a=[];a[1000];for(var v in a) s+=v+"="+a[v]+",";alert(s);
donne
1000,
Exemple rapide, Firefox, console, code :
var s="", a=new Array();a[1000];for(var v in a)
s+=v+"="+a[v]+",";alert(s);
ou
var s="", a=[];a[1000];for(var v in a) s+=v+"="+a[v]+",";alert(s);
donne
1000,
Exemple rapide, Firefox, console, code :
Où trouves-tu ça dans Firefox ? C'est une extension ?
Exemple rapide, Firefox, console, code :
Où trouves-tu ça dans Firefox ? C'est une extension ?
Exemple rapide, Firefox, console, code :
Où trouves-tu ça dans Firefox ? C'est une extension ?
Où trouves-tu ça dans Firefox ? C'est une extension ?
Outils, console d'erreur Ctrl+Maj+J
Où trouves-tu ça dans Firefox ? C'est une extension ?
Outils, console d'erreur Ctrl+Maj+J
Où trouves-tu ça dans Firefox ? C'est une extension ?
Outils, console d'erreur Ctrl+Maj+J