|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour,
A cause d'un problème de Array, j'ai du chercher, et trouver: http://www.devguru.com/technologies/...Ref/array.html [...] fruit = new Array(7) If you create an array with a single numeric parameter, that number is stored in the length property, and the array doesn't actually have any elements until some are specifically assigned to it. If, however, the parameter is not a number, an array of 1 element is created and that value assigned to it. You can easily increase the size of an array by assigning a value to an element higher than its current length. [...] Bon. Moi, je travaille avec des arrays, il n'y aura que des nombres dedans. Et le cas ou il n'y a qu'un seul élément est un cas particulier qui necessite un traitement particulier. J'ai donc besoin de vraiment avoir "fruit.length == 1" dans le cas cité en exemple. Solution que j'ai trouvé (à la va vite), transformer les nombres en chaines de caractères {fruit= new Array("7");}, et si j'ai besoin de leur valeur numérique, je re-transforme en nombre... Autrement, comment fait-on? Merci. Accessoirement... quel est la logique de cette "fonctionalité"? C'est piégeux, vicieux, même pas subtil,... ou bien? |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Le 03/05/2007 12:33, Mihamina Rakotomandimby (R12y) a écrit :
> > A cause d'un problème de Array, j'ai du chercher, et trouver: > http://www.devguru.com/technologies/...Ref/array.html > > [...] > fruit = new Array(7) > If you create an array with a single numeric parameter, that number is > stored in the length property, and the array doesn't actually have any > elements until some are specifically assigned to it. If, however, the > parameter is not a number, an array of 1 element is created and that value > assigned to it. You can easily increase the size of an array by assigning a > value to an element higher than its current length. > [...] La norme ECMAScript précise que si le paramètre len est un nombre mais que ToUint32(len) n'est pas égal à len (donc en particulier si c'est un nombre négatif ou non entier), une exception RangeError est levée. Si len n'est pas un nombre, le comportement du constructeur à un paramètre est le même que lorsque le nombre de paramètres est 0 ou bien supérieur ou égal à 2. > Bon. Moi, je travaille avec des arrays, il n'y aura que des nombres dedans. > Et le cas ou il n'y a qu'un seul élément est un cas particulier qui > necessite un traitement particulier. J'ai donc besoin de vraiment > avoir "fruit.length == 1" dans le cas cité en exemple. > Solution que j'ai trouvé (à la va vite), transformer les nombres en chaines > de caractères {fruit= new Array("7");}, et si j'ai besoin de leur valeur > numérique, je re-transforme en nombre... > > Autrement, comment fait-on? Par exemple : fruit = new Array(); fruit.push(7); Il y a plein d'autres méthodes. Il semblerait, si je comprends la doc, que ceci en soit une aussi, plus simple : fruit = [ 7 ]; > Accessoirement... quel est la logique de cette "fonctionalité"? C'est > piégeux, vicieux, même pas subtil,... ou bien? C'est piégeux, et probablement dû au poids de la compatibilité avec la définition initiale de JavaScript. Si seulement c'était le seul piège de JavaScript ! |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Mihamina Rakotomandimby (R12y) a écrit :
> > Autrement, comment fait-on? Tableau d'un seul élément qui est un nombre : var fruit = new Array(); fruit[0] = 7; ou : var fruit = [7]; Tableau de plusieurs éléments dont des nombres : var fruits = new Array(7,'orange',12,'melon',253,'pomme'); ou : var fruits = [7,'orange',12,'melon',253,'pomme']; > Accessoirement... quel est la logique de cette "fonctionalité"? C'est > piégeux, vicieux, même pas subtil,... ou bien? Logique ? je sais pas ... Vicieux ? non ça ne m'a jamais posé de pb métaphysique .... si ce n'est : pourquoi fixer d'avance la taille d'un tableau ? à rapprocher de : var vue = new Image(); var vue = new Image(125,45); où la aussi on a qques particularités il suffit de connaître ces particularismes :-) -- Stephane Moriaux et son (moins) vieux Mac déjà dépassé |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Mihamina Rakotomandimby (R12y) a écrit :
> > Autrement, comment fait-on? Tableau d'un seul élément qui est un nombre : var fruit = new Array(); fruit[0] = 7; ou : var fruit = [7]; Tableau de plusieurs éléments dont des nombres : var fruits = new Array(7,'orange',12,'melon',253,'pomme'); ou : var fruits = [7,'orange',12,'melon',253,'pomme']; > Accessoirement... quel est la logique de cette "fonctionalité"? C'est > piégeux, vicieux, même pas subtil,... ou bien? Logique ? je sais pas ... Vicieux ? non ça ne m'a jamais posé de pb métaphysique .... si ce n'est : pourquoi fixer d'avance la taille d'un tableau ? à rapprocher de : var vue = new Image(); var vue = new Image(125,45); où la aussi on a qques particularités il suffit de connaître ces particularismes :-) -- Stephane Moriaux et son (moins) vieux Mac déjà dépassé |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Le 03/05/2007 13:52, ASM a écrit :
> > var fruit = [7]; Je te remercie de confirmer ma lecture de la norme. C'est tellement difficile à lire que je n'étais vraiment pas sûr de moi sur ce coup. > à rapprocher de : > var vue = new Image(); > var vue = new Image(125,45); Je ne connaissais pas. C'est du DOM ? > où la aussi on a qques particularités > > il suffit de connaître ces particularismes :-) Tu nous en dis plus ? |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
Olivier Miakinen a écrit :
>> à rapprocher de : >> var vue = new Image(); >> var vue = new Image(125,45); > > Je ne connaissais pas. C'est du DOM ? Oui, c'est du DOM niveau 0. Les arguments "largeur, hauteur" sont facultatifs, d'où les 2 écritures possibles. C'est ce qui permet de précharger des images, par exemple, à condition de spécifier une valeur pour la propriété "src" des objets "Image". |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
Olivier Miakinen a écrit :
>> à rapprocher de : >> var vue = new Image(); >> var vue = new Image(125,45); > > Je ne connaissais pas. C'est du DOM ? Oui, c'est du DOM niveau 0. Les arguments "largeur, hauteur" sont facultatifs, d'où les 2 écritures possibles. C'est ce qui permet de précharger des images, par exemple, à condition de spécifier une valeur pour la propriété "src" des objets "Image". |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
Olivier Miakinen a écrit :
> Le 03/05/2007 13:52, ASM a écrit : >> var fruit = [7]; > > Je te remercie de confirmer ma lecture de la norme. :-) > C'est tellement difficile à lire Tu veux dire quasi impossible, je présume ? Enfin ... perso, j'ai renoncé. > que je n'étais vraiment pas sûr de moi sur ce coup. Je ne suis jamais sûr de rien ... y a pas mieux que les tests. >> à rapprocher de : >> var vue = new Image(); >> var vue = new Image(125,45); > > Je ne connaissais pas. C'est du DOM ? Du JS de nos grands mères :-) document.images = arbre des images (comme on a ceux des forms, anchors, links ... ) déclarer une nouvelle image : var truc = new Image(); déclarer une nouvelle image en pré-précisant sa taille var truc = new Image(width, height); width et height représentant largeur et hauteur (en pixels) sans unité lui attribuer un chemin (sinon ça n'a pas beaucoup d'intérêt) truc.src = 'chemin/de/mon/image.jpg'; Permet de pré ou post loader (pré ou post charger et post c'est mieux) des images pour pouvoir les utiliser "dynamiquement" plus tard. Mais : truc = new Image(); truc.src = 'img1.png'; ne suffit pas réellement à charger l'image : si l'utilisateur clicote pendant le chargement, ce dernier s'interrompt (et ne reprend pas) Utilisé simplement sous cette forme n'est réellement intéressant que si on retrouve de page en page ce post-chargement car alors, par l'indication du chemin, le navigateur prendra l'image déjà en cache. Toujours en JS de nos grands mères : afficher cette nouvelle image à la place d'une autre déjà affichée document.cetteImage.src = truc.src; ou : document.images['cetteImage'].src = truc.src; avec : <img name="cetteImage" src="autre_image.jpg" alt=""> Pour mémoire, forcer le post-chargement d'une série d'images en cache (compatible tous brouteurs depuis NC4 au moins) : JS : ==== // tableau des chemins // en profitant de nos nouvelles connaissances :-) var I = ['img1.png','bidule.jpg','chose.jpg']; // tableau vide (pour déclarer et utiliser les images) var V = []; // fixer le nbre d'images à charger var i = I.length; // fonction de chargement function imgsLoad() { i--; if(i>=0) { V[i] = new Image(); V[i].onload = imgsLoad; V[i].src = I[i]; } } // post chargement onload = imgsLoad(); HTML (exemple) : ================ <form> Changer d'image : <select onchange="var k=this.selectedIndex; document.cetteImage.src = V[k].src;"> <option> image 1 <option> image 2 <option> image 3 </select> <img name="cetteImage" src="autre_image.jpg" alt=""> </form> >> il suffit de connaître ces particularismes :-) > > Tu nous en dis plus ? var opt = new Option(text, value); par exemple ? -- Stephane Moriaux et son (moins) vieux Mac déjà dépassé |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
Olivier Miakinen a écrit :
> Le 03/05/2007 13:52, ASM a écrit : >> var fruit = [7]; > > Je te remercie de confirmer ma lecture de la norme. :-) > C'est tellement difficile à lire Tu veux dire quasi impossible, je présume ? Enfin ... perso, j'ai renoncé. > que je n'étais vraiment pas sûr de moi sur ce coup. Je ne suis jamais sûr de rien ... y a pas mieux que les tests. >> à rapprocher de : >> var vue = new Image(); >> var vue = new Image(125,45); > > Je ne connaissais pas. C'est du DOM ? Du JS de nos grands mères :-) document.images = arbre des images (comme on a ceux des forms, anchors, links ... ) déclarer une nouvelle image : var truc = new Image(); déclarer une nouvelle image en pré-précisant sa taille var truc = new Image(width, height); width et height représentant largeur et hauteur (en pixels) sans unité lui attribuer un chemin (sinon ça n'a pas beaucoup d'intérêt) truc.src = 'chemin/de/mon/image.jpg'; Permet de pré ou post loader (pré ou post charger et post c'est mieux) des images pour pouvoir les utiliser "dynamiquement" plus tard. Mais : truc = new Image(); truc.src = 'img1.png'; ne suffit pas réellement à charger l'image : si l'utilisateur clicote pendant le chargement, ce dernier s'interrompt (et ne reprend pas) Utilisé simplement sous cette forme n'est réellement intéressant que si on retrouve de page en page ce post-chargement car alors, par l'indication du chemin, le navigateur prendra l'image déjà en cache. Toujours en JS de nos grands mères : afficher cette nouvelle image à la place d'une autre déjà affichée document.cetteImage.src = truc.src; ou : document.images['cetteImage'].src = truc.src; avec : <img name="cetteImage" src="autre_image.jpg" alt=""> Pour mémoire, forcer le post-chargement d'une série d'images en cache (compatible tous brouteurs depuis NC4 au moins) : JS : ==== // tableau des chemins // en profitant de nos nouvelles connaissances :-) var I = ['img1.png','bidule.jpg','chose.jpg']; // tableau vide (pour déclarer et utiliser les images) var V = []; // fixer le nbre d'images à charger var i = I.length; // fonction de chargement function imgsLoad() { i--; if(i>=0) { V[i] = new Image(); V[i].onload = imgsLoad; V[i].src = I[i]; } } // post chargement onload = imgsLoad(); HTML (exemple) : ================ <form> Changer d'image : <select onchange="var k=this.selectedIndex; document.cetteImage.src = V[k].src;"> <option> image 1 <option> image 2 <option> image 3 </select> <img name="cetteImage" src="autre_image.jpg" alt=""> </form> >> il suffit de connaître ces particularismes :-) > > Tu nous en dis plus ? var opt = new Option(text, value); par exemple ? -- Stephane Moriaux et son (moins) vieux Mac déjà dépassé |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
ASM a écrit :
> > // post chargement > onload = imgsLoad(); onload = imgsLoad; -- Stephane Moriaux et son (moins) vieux Mac déjà dépassé |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
ASM a écrit :
> > // post chargement > onload = imgsLoad(); onload = imgsLoad; -- Stephane Moriaux et son (moins) vieux Mac déjà dépassé |
|
![]() |
| Outils de la discussion | |
|
|