PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.javascript > Array, length, un element nombre.
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Array, length, un element nombre.

Réponse
 
LinkBack Outils de la discussion
Vieux 03/05/2007, 11h33   #1
Mihamina Rakotomandimby (R12y)
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Array, length, un element nombre.

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?

  Réponse avec citation
Vieux 03/05/2007, 12h03   #2
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

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 !
  Réponse avec citation
Vieux 03/05/2007, 12h52   #3
ASM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

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é
  Réponse avec citation
Vieux 03/05/2007, 12h52   #4
ASM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

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é
  Réponse avec citation
Vieux 03/05/2007, 17h51   #5
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

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 ?
  Réponse avec citation
Vieux 04/05/2007, 08h37   #6
Pascal PONCET
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

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

  Réponse avec citation
Vieux 04/05/2007, 08h37   #7
Pascal PONCET
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

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

  Réponse avec citation
Vieux 04/05/2007, 23h21   #8
ASM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

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é
  Réponse avec citation
Vieux 04/05/2007, 23h21   #9
ASM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

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é
  Réponse avec citation
Vieux 05/05/2007, 02h20   #10
ASM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

ASM a écrit :
>
> // post chargement
> onload = imgsLoad();


onload = imgsLoad;


--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé
  Réponse avec citation
Vieux 05/05/2007, 02h20   #11
ASM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Array, length, un element nombre.

ASM a écrit :
>
> // post chargement
> onload = imgsLoad();


onload = imgsLoad;


--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 15h56.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,18476 seconds with 19 queries