Tout Sur Le Javascript
Tout Sur Le Javascript
Tout Sur Le Javascript
html
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 57 264 626
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
JavaQuoi ?!
Ne me dites pas que vous n'avez jamais entendu parler du JavaScript ! (Ou JS, pour les intimes.)
Ce langage de programmation Web véritablement magique qui rend n'importe quelle page morose en une vraie
machine dynamique !
Il permet de faire interagir le visiteur avec la page, en réagissant différemment selon les actions de celui-ci. Un
langage merveilleux qui, comme vous l'aviez sûrement compris, sera notre sujet d'étude tout au long de ce tutoriel...
Il est primordial d'avoir des connaissances solides en (x)HTML pour comprendre ce tutoriel ! Si ce n'est pas le
cas, direction le tuto de M@teo sur les sites Web.
Le JavaScript est en effet un langage qui dépend du (x)HTML.
Posséder quelques connaissances dans un autre langage de programmation (C / C++, PHP, Pascal, Maurice
...) peut vous être très utile, puisque beaucoup de langages (dont le JavaScript) sont dérivés du C...
(Nous allons partir du principe que la seule chose que vous ayez appris est l'XHTML et le CSS, d'après le cours de
M@teo. Si ce n'est pas le cas, vous allez devoir réapprendre des choses que vous savez déjà, mais sous une autre
forme...).
Dans cette partie, vous vous familiariserez avec le JS et découvrirez la syntaxe de ce langage.
Ce sont des notions qui se retrouvent, pour la plupart, dans beaucoup de langages de programmation.
1) Présentation
Logiciels nécessaires
Vos débuts en JavaScript
Où se place le code JavaScript ?
De quoi se compose le "code" ?
Q.C.M.
3) Les variables
L'indentation
Q.C.M.
5) Les conditions
Les booléens
Opérateurs et conditions
Des conditions plus élaborées
La négation
IF et ELSE
La fonction isNaN
Distinguer plusieurs cas avec SWITCH
Q.C.M.
6) Les boucles
Présentation des TD
Les consignes
Correction
Amélioration 1 : jouer plusieurs fois de suite
Amélioration 2 : quelques finitions
Code final
8) Les tableaux
Fonctions et variables
Les arguments facultatifs : nombre fixé d'arguments
Les arguments facultatifs : nombre illimité d'arguments
Q.C.M.
Et voilà, cette première partie touche à sa fin... nous allons maintenant pouvoir nous attaquer au "vrai"
JavaScript .
1) La POO, kézako ?
Au sommet de la hiérarchie...
Les objets du document
Un traitement de faveur pour les formulaires
Complément : le mot-clé "this"
Q.C.M.
L'objet "form"
Les éléments, de A à Z !
Les éléments et leur fonctionnement
Q.C.M.
Briefing
Le pseudo
L'adresse e-mail
L'âge
Tout vérifier avant l'envoi
JavaScript met à notre disposition plusieurs objets, tels que les tableaux (Array), les chaînes de caractères
(String), etc.
Cette partie a pour but de vous les présenter, vous montrer leurs principales méthodes, ainsi que d'illustrer leur
fonctionnement par des exemples.
Même si ces chapitres se veulent suffisamment complets, ils fournissent une liste non exhaustive des
attributs / méthodes des objets abordés.
Sommaire
Les classiques
Moins classiques
Les piles et les files
2) L'objet "Math"
Sommaire
Fonctions basiques
Arrondir
Trigonométrie
Autres fonctions usuelles
Inclassables
Fonctions indépendantes de l'objet "Math"
Nos propres fonctions
3) L'objet "Date"
Sommaire
Méthodes diverses
Récupérer et modifier l'heure
4) L'objet "String"
Sommaire
Opérations sur les caractères
Opérations sur les chaînes
Rechercher et remplacer
5) L'objet "RegExp"
Sommaire
Créer une regex
Quelques exemples
Utiliser une regex
6) L'objet "Image"
Sommaire
Événements
Attributs
Exemples d'utilisation
7) Le CSS via JS
Sommaire
Exemples d'utilisation
Afficher / masquer un élément
Plusieurs classes pour un même élément
Notre fonction "getElementsByClassName"
Partie 4 : Annexes
Ici, vous trouverez tout ce qu'il faut avoir à portée de clic lorsque vous programmez :
aide-mémoire
liste de fonctions / propriétés / choses qui peuvent servir
...
et plein d'autres trucs !
La partie précédente, intitulée visite guidée des objets JS, a été rédigée dans ce même esprit. Mais comme il
nous fallait beaucoup de chapitres pour présenter ces objets, ils ont droit à leur propre partie.
1) Syntaxe en JavaScript
Nous vous rappelons qu'il n'est pas achevé, et que d'autres chapitres suivront bientôt.
Nous faisons également part de nos sincères remerciements à nos testeurs / relecteurs, dont vous trouverez les noms
dans notre "biographie".
Présentation
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 3 317 835
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Avant de nous lancer dans des lignes de code, je vous ai préparé un petit avant-propos qui ne vous fera aucun mal . Vous en apprendrez un peu
plus sur le JS (JavaScript), et nous ferons par la même occasion un peu d'histoire.
Ce chapitre n'est pas placé en annexe car il apporte des éléments importants : prenez donc le temps de le lire.
Au risque de me répéter, le JS s'insère dans une page Web et nécessite donc de bonnes bases en (x)HTML.
Sommaire du chapitre :
Définition
Pour une définition plus complète, voici un "remix" de ce que nous propose notre ami Google :
Je l'avoue, c'est très compliqué... Mais pas de panique, nous allons aborder les différents points de cette définition au fil du tuto.
Utilisation
ouvrir des pop-up (les petites fenêtres qui s'ouvrent de manière intempestive)
faire défiler un texte
insérer un menu dynamique (qui se développe au passage de la souris)
proposer un diaporama (changement d'image toute les X secondes, boutons pour mettre en pause, aller à l'image précédente / suivante,
etc.)
avoir une horloge "à aiguilles" (avec la trotteuse)
faire en sorte que des images suivent le pointeur de la souris
créer de petits jeux (comme le classique "Plus ou Moins", cf. TP)
insérer des balises du zCode (les balises qui apparaissent en cliquant sur le bouton)
faire un aperçu du zCode en direct.
Vous voyez que les possibilités sont donc nombreuses (le JavaScript sert en effet beaucoup sur ce site).
Il ne faut cependant pas "polluer" son site avec trop de scripts inutiles... Les pop-up ou les images qui suivent la souris partout peuvent agacer le
visiteur, et "charger" un site, si bien qu'il est difficile d'accéder clairement aux informations qu'il propose...
L'utilisation du JavaScript ne se limite toutefois pas aux pages web : étant un langage pratique à mettre en oeuvre (il suffit d'un navigateur et d'un
éditeur de texte tel que Bloc-notes), il s'est répandu et se répand ailleurs.
Un exemple : vous pouvez créez vos propres plugins pour Messenger Plus! Live en JScript (c'est JavaScript à quelques différences près).
Il est également possible de faire facilement de petites "applications" en DHTML !
Le DHTML (Dynamic HyperText Markup Language) désigne des pages dont le contenu (ou la mise en forme) est modifié sans avoir à recharger la
page. (Ce terme n'a pas de définition officielle du W3C.)
C'est bien le cas des exemples cités ci-dessus : on modifie une image, on la déplace, on fait défiler du texte, ...
Le JavaScript, inventé par un certain Brendan Eich et développé par Netscape, fait son apparition en 1995, sous le nom de LiveScript, dans le but
de dynamiser les pages web.
Son utilisation s'est largement répandue, et il se fait rapidement accepter par d'autres navigateurs.
Il est aujourd'hui très présent sur les sites web : de plus en plus de webmasters s'y intéressent, et il est de mieux en mieux accepté, à la fois par
les navigateurs et par les visiteurs ; ce qui lui réserve sans doute un bel avenir...
Voici un petit résumé de ce que l'on a déjà pu dire à propos des caractéristiques du JS. Ceci est à retenir.
Comment ça marche ?
Primo : un script
Un script ?
Comme beaucoup de mots d'utilisation usuelle (ici dans le milieu de l'informatique), script a deux sens : l'un, qu'on pourrait qualifier de "global",
l'autre de strict.
La définition la plus simple est la définition globale, celle qu'on utilise tout le temps et qui pourtant ne veut rien dire :
un script, c'est tout simplement un bout de code JavaScript qui a une tâche précise.
Dès que l'on parlera de script, ce sera pour désigner le code que l'on aura inséré à notre page Web.
Mais, si ça n'a pas vraiment de sens, c'est parce que la véritable signification du mot script en informatique est bien plus rigoureuse.
Grosso modo, pour faire simple, un script est, par opposition à un langage compilé, un langage qui s'interprète. Ici, l'interprète du JavaScript,
c'est le navigateur du visiteur (le client).
Cette dernière définition, nous ne l'utiliserons sûrement presque pas : dès qu'on a compris, ça ne sert plus vraiment à grand-chose de le savoir.
L'intérêt des scripts est sans doute leur manière d'être utilisés : en effet, ils ne sont pas obligatoirement exécutés au chargement de la page. Ils
sont lancés lorsqu'un événement spécifique se produit.
Pour illustrer ceci, voici quelques exemples d'événements qui peuvent se dérouler lors de la visite d'une page Web :
Et vous vous retrouvez avec un site très interactif : vous ne pouvez plus bouger la souris sans déclencher un script .
Ceci étant, ce n'est pas un très bon exemple. Je l'ai peut-être déjà dit, mais les pop-up qui s'ouvrent tout le temps, et les scripts à n'en plus finir,
c'est chiant très agaçant ( ).
Secundo, un client
Un client ?
Oui, un client (ou encore visiteur, enfin celui qui visite la page web en question).
Vous avez peut-être déjà rencontré ce mot (dans le sous-chapitre précédent), mais quelques explications s'imposent tout de même...
Si vous avez suivi les cours sur le PHP, vous devriez savoir que celui-ci est exécuté côté serveur.
Autrement dit, vous demandez au serveur de vous donner une page (par exemple la page d'accueil du SdZ) : il va lire cette page, exécuter le code
PHP et vous donner la page ainsi générée.
Schématiquement, pour ceux qui justement n'y connaissent rien en PHP, voici comment ça marche :
Et ça change tout !
Comme c'est votre navigateur qui exécute le script, il a donc accès au code de celui-ci (sinon comment ferait-il pour l'exécuter ? ). Et si votre
navigateur y a accès... vous pouvez vous aussi y avoir accès (pour les curieux, c'est dans la source de la page, entre les balises (x)HTML, comme
Les scripts d'une page ne vous plaisent pas ? Qu'à cela ne tienne : il suffit par exemple de désactiver le JavaScript (parmi les options du navigateur
web)...
JavaScript et Java
Je termine avec un point important (comme diraient nos confrères anglais, "Last, but not least" ):
J'insiste sur ce point. C'est une confusion courante, mais ces langages sont totalement différents. Le Java a été développé par Sun Microsystems
au début des années 90.
Pour vous donner une idée, le langage Java serait plus proche du C++ que du JavaScript.
Le JavaScript est placé directement dans le code (x)HTML et fait partie intégrante du code source. Le navigateur lit et interprète ce
code source, et exécute alors vos scripts (ou les garde en mémoire pour les lancer plus tard, lorsqu'un événement particulier se produit).
Le Java, quant à lui, est compilé pour former un programme. Comme nous l'avons déjà vu, les langages compilés sont les opposés des
scripts.
Si "LiveScript" (en rappel, c'est la tout première appellation du JavaScript) a pris le nom qu'on lui connaît aujourd'hui, c'est parce que Java et
JavaScript ont un seul point commun : ce sont des langages orientés objet (comme le C++ si vous connaissez, c'est pour cela qu'ils sont proches). A
part cela, je le dis et je le répète, ces deux langages sont strictement opposés !
Alors, s'il y en a un qui confond ces deux langages, ça va chi mal se passer !!!
Q.C.M.
Le JavaScript est un langage ...
qui se compile
une horloge qui affiche (en temps réel) l'heure, au dixième de seconde près
un diaporama
une protection sécurisée pour la partie réservée aux administrateurs de votre site
Java et JavaScript :
c'est la même chose, ce sont deux noms différents pour un même langage
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 5 689 331
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Vous allez créer votre premier script : à la fin de ce chapitre, vous serez capable d'afficher des boîtes de dialogue
(contenant un message).
Rien d'impressionnant, certes, mais ces boîtes de dialogue vous seront fort utiles pour la suite...
Sommaire du chapitre :
Logiciels nécessaires
Vos débuts en JavaScript
Où se place le code JavaScript ?
De quoi se compose le "code" ?
Q.C.M.
Logiciels nécessaires
Comme j'ai pu vous le dire dans le premier chapitre, le JavaScript est un langage facile à mettre en oeuvre.
De même que pour créer une page (x)HTML, il vous suffit :
d'un éditeur de texte : Bloc-notes est suffisant, mais d'autres logiciels offrent plus d'options, comme la
coloration syntaxique, qui est très appréciable.
Notepad++ (que vous possédez peut-être déjà... ) en est un bon exemple.
d'un navigateur : FireFox, avec le plugin Web Developer, est parfaitement approprié pour cela.
Cependant, pour vérifier la compatibilité de vos scripts, il peut être utile de les tester sur plusieurs des
navigateurs les plus courants (Internet Explorer 6, Opera et Firefox étant les références pour les PC).
Les commentaires
Si vous êtes un bon utilisateur du (x)HTML et du CSS (et je suis sûr que c'est le cas ), vous devriez savoir vous servir
des commentaires.
Je vous rappelle que les commentaires sont des phrases qu'on utilise justement... pour commenter le code ! Elles n'ont
aucune conséquence sur celui-ci.
Cela permet d'avoir un code clair et compréhensible par toute personne qui le lirait .
Ils seront très utilisés dans la suite de ce cours.
Les commentaires, c'est comme tout, il ne faut pas en abuser : il n'est pas nécessaire de commenter chaque
ligne, ça rendrait votre code lourd.
Mieux faut commenter le code par portion, en ne mettant des commentaires que lorsque vous les jugez utiles.
En (x)HTML
Code : HTML
Vous pouvez donc y écrire plus ou moins ce que vous voulez, évitez cependant les caractères spéciaux
(particulièrement les crochets < et >, le dernier pouvant être interprété par le navigateur comme la fin du
commentaire).
Voici un exemple d'utilisation d'un commentaire (au milieu d'une page (x)HTML) :
Code : HTML
En JavaScript
Les commentaires sur une seule ligne : ils se placent sur la fin de la ligne, après // (deux slashs).
Évitez cependant d'écrire trop de choses de cette manière. Fixez-vous une limite (généralement, on prend 80
caractères maximum par ligne, code compris, mais il n'y a aucune obligation).
Les commentaires sur plusieurs lignes : exactement comme en CSS ,
ils se placent entre /* et */ : il n'y a ici aucune limitation sur la longueur du commentaire. Vous pouvez donc
en écrire autant que vous voulez.
Notez que vous pouvez parfaitement utiliser cette notation pour les commentaires courts (certaines personnes
n'utilisent que celle-ci).
Code : JavaScript
C'est une petite fenêtre (une boîte) qui sert à communiquer (dialoguer) avec l'utilisateur (lui afficher ou lui demander
quelque chose).
Celle que nous allons créer sert à afficher un message.
Code : JavaScript
alert('Hello world');
Vous pouvez remplacer le classique "Hello world" par le texte de votre choix, en laissant les apostrophes de part et
d'autre de votre message (qui doit lui-même ne pas contenir d'apostrophe).
Nous étudierons plus en détail ce code, une fois que vous saurez insérer du JS sur une page Web, autrement dit
un peu plus bas sur cette page.
On écrit le JS dans notre page HTML, et c'est le navigateur qui lit et exécute ce code.
Mais comment fait-il pour différencier les deux ?
Vous le savez sûrement déjà, un ordinateur, c'est bête : il faut lui dire tout ce qu'il doit faire.
Eh bien c'est ce que nous allons devoir faire : si on ne précise pas à notre navigateur que notre code est du JS, il ne le
devinera pas tout seul.
Voyons donc comment le lui dire...
Avant de continuer, je vous rappelle juste quelques informations essentielles concernant le xHTML :
La première méthode consiste à écrire le code directement à l'intérieur de la balise qui va être concernée par le
script.
Comment ça marche ?
Pour insérer le code dans une balise, une nouvelle propriété est nécessaire. Il s'agit du gestionnaire d'événements (en
anglais : event handler).
Cette propriété est caractéristique du JS : elle suffit à dire au navigateur : "attention, ce qui suit est du JS".
Elle porte le nom de l'événement qui doit déclencher le script (c'est pour cela qu'on parle de "gestionnaire
d'événements").
Elle contient comme valeur le script à exécuter lors de cet événement.
Pour résumer, la balise en question aura cette forme-là (ici il s'agit d'une balise seule, c'est le même principe pour les
balises fonctionnant par paires) :
Code : HTML
Code : HTML
<a href="#">lien</a>
Code : JavaScript
Code : HTML
Vous pouvez tester ce code (c'est même conseillé : réécrivez-le, vous le retiendrez beaucoup mieux qu'en faisant un
copier-coller).
Résultat : notre boîte de dialogue devrait apparaître lorsque vous cliquez sur le lien !
Après le on, le C de click doit être en minuscule ! Ceci est valable pour tous les gestionnaires d'événements.
Si, même après le changement de la majuscule, rien ne se passe, votre navigateur a peut-être empêché le JS
de s'exécuter.
Dans ce cas, référez-vous à l'aide de celui-ci.
Solution :
Code : HTML
Code : HTML
Cette méthode a l'avantage de ne pas faire remonter le visiteur en haut de la page, comme l'aurait fait un lien portant
le petit dièse (#) ; c'est ce que vous avez sûrement dû voir si vous avez testé le code.
En voici quelques-uns :
Le mieux est de les essayer, vous verrez par vous-mêmes à quoi correspond chaque événement.
Voici une image contenant plusieurs gestionnaires d'événements :
Code : HTML
Et voici la balise <body> pour créer une page disant "Bonjour" et "Au revoir" :
Code : HTML
Et si notre script est très long, on ne va quand même pas tout mettre dans notre gestionnaire d'événements ?
Rassurez-vous, s'il existe plusieurs manières différentes d'insérer du JavaScript, ce n'est pas pour rien.
La seconde solution consiste à écrire le script entre deux balises spécifiques, <script> et </script>.
Il faut commencer par préciser au navigateur que notre script est... du JavaScript.
Pour cela, on rajoute la propriété type="text/javascript", ce qui nous donne ceci :
Code : HTML
<script type="text/javascript">
</script>
Mais il y a un problème !
Imaginez un vieux navigateur qui ne connaît pas le JS : s'il tombe sur cette balise, il va tout simplement l'ignorer, car
elle lui sera inconnue. Mais tout le code qui suit sera considéré comme du texte, il va donc l'afficher sur votre page !
Pas très élégant .
Il existe heureusement une solution...
Pour faire ignorer ce texte à ce vieux navigateur, on lui fait tout simplement croire qu'il s'agit d'un commentaire en
(x)HTML.
Pour un navigateur qui connaît le JavaScript, il saura qu'il n'a plus affaire à du (x)HTML, et passera donc la balise du
commentaire (<!--) sans en tenir compte.
Mais pour éviter qu'il soit déboussolé en rencontrant la balise de fin de commentaire (-->), nous allons lui dire, en JS,
qu'il s'agit d'un commentaire, grâce à //.
Pour résumer, voici comment placer du JS dans une page en utilisant la balise <script> :
Code : HTML
<script type="text/javascript">
<!--
//-->
</script>
Ces balises, elles sont à mettre dans l'en-tête, ou dans le corps de la page ?
On peut les placer soit dans l'en-tête (<head> ... </head>), soit dans le corps (<body> ... </body>) de la page
(x)HTML :
dans le corps de la page, sont à placer les scripts à exécuter au chargement de cette dernière (lorsque le
navigateur "lira" le code, il l'exécutera en même temps).
C'est ce que nous allons utiliser pour cet exemple, il suffit d'écrire le code à exécuter entre les balises ;
en revanche, sont à placer dans l'en-tête les éléments qui doivent être exécutés plus tard (lors d'un événement
particulier, par exemple).
Dans ce cas, le code n'est pas écrit "en vrac", nous apprendrons plus loin comment l'organiser.
Ce qui nous fait donc deux manières d'insérer le code grâce à ces balises.
Exemple d'application
une boîte de dialogue indiquant le début du chargement de la page (donc, le code est à placer au début du
corps de la page),
une autre indiquant la fin du chargement de celle-ci (donc, à la fin du corps).
Code : HTML
<title>Un exemple</title>
<body>
</body>
</html>
Vous remarquez que tant que la première boîte de dialogue est ouverte, la page n'est pas chargée.
En effet, le navigateur exécute le JS au fur et à mesure du chargement de la page : il attend donc que le script soit
terminé avant de charger la suite.
Comme pour le CSS, on peut très bien placer notre code dans un fichier indépendant. On dit que le code est importé
depuis un fichier externe. En CSS, l'extension de ce fichier (les deux à quatre lettres précédées d'un point à la fin
d'un fichier) était .css.
Vous l'avez peut être deviné, l'extension du fichier externe contenant du code JavaScript est .js.
On va indiquer aux balises le nom et l'emplacement du fichier contenant notre (ou nos) script(s), grâce à la propriété
src (comme pour les images).
Comme il n'y a plus de code entre les balises, la technique pour masquer le code aux anciens navigateurs n'a
Code : HTML
Code : JavaScript
alert('Bonjour');
Créer le fichier
Si vous ne savez pas créer un fichier ayant l'extension .js, voici comment faire.
Avec Notepad++
Avec Bloc-notes
Ouvrez Bloc-notes.
Dans le menu Fichier, choisissez Enregistrer sous...
Dans le menu déroulant Type de la nouvelle fenêtre, choisissez Tous les fichiers (ou All types en anglais).
Entrez le nom que vous voulez, suivi de .js.
Pour rouvrir ce fichier, faites un clic droit dessus, Ouvrir avec... puis choisissez Bloc-notes.
Code : JavaScript
alert('Hello world');
Des instructions
Une grande partie de ce que vous écrirez en JS sont des instructions, mais pas tout.
Difficile de vous donner des exemples maintenant, je vous indiquerai au fur à mesure ce qui est ou n'est pas une
instruction.
Quand on donne une instruction à l'ordinateur, il faut également lui dire où est la fin de cette instruction...
Pour cela, en JS, il y a deux solutions :
revenir à la ligne (avec la touche Entrée ou Enter) : l'ordinateur comprendra qu'il aura ensuite affaire à une autre
instruction.
utiliser un point-virgule (;) à la fin de l'instruction, comme je l'ai fait dans les exemples jusqu'ici.
Il est bien sûr parfaitement possible d'utiliser un point-virgule et un (ou plusieurs) retour(s) à la ligne...
Dans de nombreux langages de programmation (le JavaScript étant une exception), le point-virgule est
obligatoire à la fin d'une instruction.
Je vous recommande donc fortement de prendre l'habitude d'en mettre un après chaque instruction.
Les fonctions
Explication
alert('Hello world');
Cette fonction affiche, lorsqu'on l'appelle (terme à retenir), une boîte de dialogue contenant le texte entre les
apostrophes (ici : 'Hello world').
Si vous êtes un peu matheux (ou si vous avez simplement suivi en cours au collège et au lycée ), le terme fonction
ne doit pas vous être inconnu... On a dit tout à l'heure qu'un calcul est une instruction. La fonction f telle que f(x) =
15x - 4 est une suite de calculs, donc en quelque sorte une suite "d'instructions" (par analogie avec le JavaScript, car
instruction est un terme purement informatique).
Excellente question !
Revenons à notre exemple mathématique : entre les parenthèses, on précise la valeur de l'argument x.
Avec x = 5, on aura f(5) = 15*5 - 4 = 71.
C'est le même principe en JavaScript : par exemple, avec alert(), l'argument est le texte à afficher. S'il y a plusieurs
arguments, ils sont séparés par des virgules.
On doit obligatoirement mettre ces parenthèses, même s'il n'y a aucun argument (elles seront alors vides).
Normalement, le nom de la fonction est alert, ou f pour la fonction mathématique citée plus haut.
Employer le nom alert() est un abus de langage, mais cela permet de repérer facilement qu'on parle d'une fonction.
De nouvelles fonctions
Bien sûr !
Il existe en effet des fonctions déjà définies (retenez également ce terme) en JS, qu'on va donc pouvoir utiliser
directement, comme notre fonction alert(). Le navigateur va alors chercher la définition de cette fonction et
l'exécuter, ce qui aura pour effet de faire apparaître notre message.
Mais il est également possible de créer nos propres fonctions (par exemple, une fonction qui convertit des euros en
francs), ce sera l'objet d'un chapitre.
Q.C.M.
Quel commentaire est correct en JavaScript ? (Correct en termes de syntaxe, l'utilité du commentaire n 'a pas
d'importance ici.)
// J'écris ce commentaire pour indiquer que le code qui va suivre est mon premier script. Il a simplement pour effet
d'afficher une boîte de dialogue contenant le message de mon choix, avec un bouton "Valider" pour fermer cette boîte.
Quel est le terme exact pour désigner un ordre que l'on donne à l'ordinateur ?
Un ordre
Une instruction
Une commande
Une fonction
onclick
onmouseout
ondoubleclick
onmouseover
ondblclick
Vous savez désormais exécuter du code JavaScript ; attaquons donc sans plus tarder le chapitre suivant !
Les variables
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 2 412 278
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Un ordinateur sait bien faire des calculs et des opérations en tout genre.
Mais il possède également une mémoire "infaillible" pour retenir un tas d'informations (les résultats des calculs, par
exemple ) : vous allez voir dans ce chapitre qu'en Javascript, savoir utiliser cette mémoire est indispensable, ou
presque...
Sommaire du chapitre :
Peut-être vous demandez-vous comment votre ordinateur range toutes ces informations ?
Vous vous doutez bien qu'on ne fait pas un "gros tas" de données, en vrac : imaginez la galère pour retrouver ce qui
nous intéresse .
Comme vous vous en doutez, tout cela est organisé.
Illustration
Premièrement (c'est la raison pour laquelle vous les avez enregistrées ), vous allez pouvoir les lire quand vous en
aurez besoin.
Cela consiste à ouvrir la boîte, prendre l'information, l'utiliser et la remettre dans sa boîte.
Par exemple, on fait un calcul, on enregistre le résultat dans une variable, et lorsque l'utilisateur clique sur un bouton
spécial, on affiche le résultat.
Maintenant que vous avez compris (du moins je l'espère ) ce que c'était, voyons le fonctionnement en JavaScript.
Créer la variable
var nom;
nom est le nom de la variable (si vous avez aimé mon illustration, c'est ce qui est écrit sur l'étiquette collée sur la
boîte).
Le terme exact n'est pas "créer" , mais déclarer une variable.
Pour ceux qui aiment les maths, si on prend la phrase "soit x l'âge de Toto, en années", le var correspondrait au soit.
(Note : nous verrons un peu plus loin qu'il y a des cas pour lesquels on ne déclare pas une variable.
Mais retenez pour l'instant qu'il ne faut pas oublier la déclaration).
Il y a également des mots "interdits" : ils existent déjà en JS, mais pour autre chose. Si on les utilise comme nom de
variable, l'ordinateur ne saura plus de quoi il s'agit.
Parmi cette liste de mots, les plus courants (pour un français) seraient "break", "case", "char", "continue",
"delete", "double", "final", "long", "new", "public" et "super". Les autres sont des noms anglais moins courants (je
ne pense pas que vous ayez l'idée d'appeler une variable "throws" ).
Vous pourrez retrouver la liste complète en annexe.
Heureusement, ça vous laisse quand même du choix dans le nom de vos variables .
Le JavaScript est sensible à la casse : autrement dit, il fait la différence entre lettres majuscules et
minuscules.
Ainsi, nom, Nom et NOM sont trois variables différentes !
Notez que nous utilisons une mémoire temporaire : les variables sont détruites lorsque le visiteur quitte la page
(lorsqu'il change de page, entre autres).
Pour modifier la valeur d'une variable, rien de plus simple : on utilise pour cela le symbole d'affectation = de cette
manière :
Code : JavaScript
var annee;
var message;
annee = 2006;
message = "Bonjour, visiteur";
Il n'est pas obligatoire de déclarer les variables au début du code, mais ça peut vous éviter de déclarer deux
fois une même variable.
Il est possible, lorsque l'on crée une variable, de lui affecter immédiatement une valeur. On dit qu'on initialise cette
variable.
Code : JavaScript
Car ils délimitent du texte. Je n'en dis pas plus, j'y reviendrai un peu plus bas.
Lorsque l'ordinateur trouve un nom de variable, il fait directement référence à son contenu.
Autrement dit, si j'ai une boîte nommée annee contenant la valeur 2006, si je parle à l'ordinateur de annee (sans
guillemets), il ira chercher la valeur contenue par cette boîte.
En anglais : string (je ne le dis pas pour le "jeu de mot" d'une finesse sans égale, mais parce que, tôt ou tard, vous en
entendrez parler).
C'est une suite de caractères (un caractère est une lettre, un chiffre, un espace, un tiret...) qui a un ordre précis.
Dit autrement, ce sont des caractères mis bout-à-bout.
Cela forme donc... du texte ! (Dit comme ça, c'est tout de suite plus simple .)
Vous vous dites peut-être : "c'est facile, il suffit d'écrire le texte après le signe = pour enregistrer du texte dans une
variable".
Que nenni !
Et cela pour plusieurs raisons : tout d'abord, comment l'ordinateur saurait où se trouve le début et la fin de votre
texte ? (Le point virgule en fait-il partie, ...)
Deuxièmement, l'ordinateur analysera le type de données : est-ce que ce sont des variables ? Des chiffres ?
Il va donc falloir dire à l'ordinateur : "ceci est une chaîne de caractères, n'essaie pas de comprendre".
Et pour cela, on utilise indifféremment les guillemets " (dits "double quotes") ou les apostrophes ' (dites "simple
quotes") : ils délimitent la chaîne de caractères, un peu comme une citation.
Car le JavaScript peut être placé directement dans une balise (x)HTML (rappelez-vous du onclick) : dans ce cas, on
ne peut pas mettre de double quotes (ils sont déjà utilisés en (x)HTML pour délimiter le script). On utilise donc les
simple quotes.
Un exemple :
Code : HTML
Code : JavaScript
alert('Bonjour');
Et si je veux mettre des guillemets à l'intérieur de ma chaîne, qui est délimitée par des guillemets ?
Et comment je fait un saut de ligne ?
Il faut dire à l'ordinateur que les guillemets du milieu sont des caractères normaux, et non pas les délimiteurs.
Pour cela, on utilise ce qu'on appelle un caractère d'échappement : on fait précéder le guillemet à afficher d'un \
(antislash, touches Alt Gr + 8 pour les claviers français, Alt Gr + < pour les belges).
Et pour afficher un antislash... on le fait précéder d'un antislash aussi .
Code : JavaScript
var message1 = "Ceci est un \"petit\" test. Mais pas besoin d'antislash
\\ devant les apostrophes.";
var message2 = 'Un autre "petit" test. Cette fois, il faut penser à
l\'antislash devant les apostrophes';
alert(message1);
alert(message2);
On peut également insérer des retours à la ligne (qu'on ne peut pas insérer simplement en appuyant sur la touche
Enter), ainsi que des tabulations ou autres.
Un exemple (cela signifie "Bonjour ! - Comment vous appelez-vous ?" en allemand. Je l'ai pris pour le caractère spécial)
:
Code : JavaScript
La concaténation
Concaquoi ?!
Pour faire cela, on va en fait mettre bout-à-bout nos 3 morceaux de chaîne (le premier morceau est "Vous avez ",
ensuite la variable age, et enfin " ans", sans oublier les espaces après "avez" et avant "ans").
Concaténer, c'est en fait "mettre bout-à-bout" plusieurs chaînes de caractères pour n'en former qu'une seule.
Comment faire ? On utilise simplement le symbole de concaténation + entre chaque morceau (pour ceux qui
connaissent, en php, c'est le point qui est utilisé), comme ceci :
Code : JavaScript
(On aurait aussi pu créer une variable message contenant la chaîne concaténée, et l'afficher ensuite.)
Vous avez peut-être envie de tester ce code, mais avec une variable age contenant l'âge qu'on aura demandé au
visiteur ?
Voyons une première façon de le lui demander.
Vous vous souvenez sûrement de nos alert("message"); affichant un message dans une boîte de dialogue.
Eh bien il existe un moyen très proche (encore une boîte de dialogue) pour demander au visiteur de saisir son âge.
Code : JavaScript
Entre les parenthèses, on met une chaîne de caractères (comme pour alert) qui sera affichée au-dessus du champ
pour saisir son texte.
On récupère la chaîne de caractères dans la variable age (notez que si elle a déjà été déclarée, on ne met pas le var
devant).
Voici un exemple complet (que je vous conseille de réaliser) : on demande l'âge du visiteur pour le lui afficher ensuite
(dans une phrase).
Ce qui nous donne ceci :
Code : JavaScript
Les nombres
Les nombres, au même titre que les chaînes de caractères, sont un type de variable.
Comme ce sont des nombres (l'ordinateur sait compter), on ne met pas de guillemets : l'ordinateur va "comprendre"
qu'il s'agit d'un nombre, et va l'enregistrer à sa manière (et non pas bêtement chiffre par chiffre, comme il l'aurait fait
avec une chaîne de caractères).
Un petit exemple :
Code : JavaScript
Comme vous le savez, avec des nombres... on peut faire des calculs. Eh oui, le JavaScript, c'est parfois aussi des
maths .
L'ordinateur est particulièrement doué pour ces calculs...
Voici les opérateurs de base :
+ (addition), exemple : 52 + 19 = 71
- (soustraction), exemple : 52 - 19 = 33
* (multiplication), exemple : 5 * 19 = 95
/ (division), exemple : 5 / 3 = 1,666...667 (une petite vingtaine de "6")
% (modulo) : ici, quelques explications s'impose.
a % b (si b est positif, ce qui est le cas dans presque toutes les applications) est le reste de la division de a par
b.
Exemple : 52 % 19 = 14 (car 52 = 19*2 + 14)
Correction...
Secret (cliquez pour afficher)
Code : JavaScript
Notez qu'on aurait pu afficher directement le résultat, sans créer une variable pour celui-ci. On aurait alors mis
le calcul à la place du nom de la variable dans le message à afficher.
Cas particuliers
Peut-être avez-vous essayé de faire planter le truc (le genre de truc que j'adore m'amuser à faire ).
Voici les messages que vous avez pu obtenir :
si vous entrez "0" en deuxième nombre (division par 0 impossible...) : le résultat sera "Infinity" ou
"-Infinity" (l'infini, positif ou négatif).
Si vous avez entré du texte, vous obtenez un joli "NaN".
Ça ne veut pas dire "Nan, fais pas ça !" (bah quoi, ça aurait pu ? ).
NaN signifie Not a Number ("Pas un nombre") : c'est un message que vous serez sûrement amenés à rencontrer
...
Sachez que dans la plupart des cas, la conversion est faite au-to-ma-ti-que-ment.
Un exemple ? Dans votre script de division (quelques lignes plus haut), on demande en fait au visiteur non pas un
nombre, mais une chaîne de caractères. Mais lorsque vous demandez à diviser, l'ordinateur sait qu'il ne peut pas les
diviser. Il va donc essayer de les convertir en nombre (c'est là qu'il vous sort le fameux "NaN" s'il n'arrive pas à effectuer
cette conversion).
Rassurez-vous, il est fort heureusement possible d'effectuer "manuellement" cette conversion, grâce à
parseInt(chaine_a_convertir) (convertir en un nombre entier) et à parseFloat(chaine_a_convertir)
(convertir en un nombre décimal).
parseInt("12.9 Euros") vaudra 12 (on convertit en entiers, les chiffres après la virgule sont ignorés)
parseInt(" 12 Frs ") vaudra également 12 (l'espace en début de chaîne est ignoré)
parseInt("J'ai 12 Euros") vaudra Nan (la chaîne commence par une lettre)
parseFloat(" 12.9 Frs ") vaudra 12.9
parseFloat("3,14") vaudra... 3 : il faut utiliser le point et non la virgule. La conversion va donc s'arrêter
après le "3".
Idem, cette conversion se fait automatiquement (lorsque l'on affiche un nombre au milieu de texte, il le convertit pour
le concaténer ensuite).
Si vraiment vous avez besoin d'effectuer manuellement cette conversion (par exemple en voulant afficher deux
nombres les uns derrière les autres), vous pouvez ajouter des '' (deux apostrophes).
En ajoutant une chaîne entre ces nombres, l'ordinateur sera forcé de les concaténer.
Exemple :
Code : JavaScript
var nombre1 = 8;
var nombre2 = 12;
alert(nombre1 + '' + nombre2);
Priorités de calcul
la première est composée des multiplications (*), division (/) et modulo (%)
la seconde regroupe addition (+) et soustraction (-).
- Tout d'abord, les opérations de la première catégorie sont effectuées de gauche à droite.
- Ensuite (il ne reste donc que des additions et soustractions, les autres calculs sont déjà effectués), le calcul se fait
de gauche à droite.
S'il y a des parenthèses, on effectue le calcul entre celles-ci en priorité, suivant ces règles.
Un exemple : calcul étape par étape (en bleu, le calcul à effectuer ; en gras, le résultat du calcul précédent) :
Il existe, de la même manière, les opérateurs -= (on retranche la valeur de la deuxième variable à celle de la
première), *= (on multiplie la valeur de la première variable par celle de la deuxième), /= (idem mais avec une
division) et %=.
Incrémentation / décrémentation
Lorsque l'on veut augmenter de 1 la valeur d'une variable (on dit incrémenter), par exemple pour un compteur, on
utilise la notation :
Code : JavaScript
variable++;
De même, pour décrémenter (diminuer la valeur de 1) une variable, le code est le suivant :
Code : JavaScript
variable--;
Pour résumer...
Code : JavaScript
variable += X;
variable = variable + X;
Code : JavaScript
variable -= X;
variable = variable - X;
Code : JavaScript
variable *= X;
variable = variable * X;
Code : JavaScript
variable /= X;
variable = variable / X;
Code : JavaScript
variable %= X;
variable = variable % X;
Code : JavaScript
variable++;
variable += 1;
variable = variable + 1;
Code : JavaScript
variable--;
variable -= 1;
variable = variable - 1;
Q.C.M.
Quand déclare-t-on une variable ?
une citation
un nom de variable
un nombre
du code JS
La concaténation...
n'existe pas en JS
Vrai ou faux ?
Les nombres sont des chaînes de caractères.
Vrai
Faux
Maintenant que vous savez manier les variables, direction le prochain chapitre pour en tester le contenu !
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 1 701 829
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Quelques rappels
Une fonction est une suite d'instructions ayant un rôle précis (pour ne pas dire une fonction précise...).
On lui donne (éventuellement) des arguments (également appelés paramètres) entre les parenthèses qui
Un petit exemple :
Code : JavaScript
Les fonctions que nous allons créer fonctionnent selon le même principe.
Dans de ce chapitre, notre fonction aura pour but de convertir des Euros en Francs (c'est un bon exemple, même s'il est
un peu démodé ).
Mais on peut bien faire ça sans avoir besoin de faire une fonction ?
Oui, mais en créant une fonction, nous pourrons lancer le script à chaque fois que nous en aurons envie .
Il nous suffira pour cela d'appeler cette fonction.
on dit que l'on déclare une fonction lorsqu'on la "crée" : on dit à l'ordinateur qu'elle existe et ce qu'elle doit
faire (on écrit le code de cette fonction).
On pourra ensuite appeler notre fonction, ce qui veut dire qu'on va lui demande d'exécuter son code.
Voyons comment faire notre propre fonction : nous allons utiliser l'exemple du convertisseur dont je vous ai parlé plus
haut.
Déclaration
On commence par déclarer notre fonction : on va dire à l'ordinateur "je veux créer une fonction qui s'appelle machin et
qui fait ceci".
Quelques informations à ce sujet :
lors de la déclaration d'une fonction, celle-ci n'est pas exécutée, mais mise en mémoire, pour être exécutée
plus tard.
Le code sera alors placé dans l'en-tête de la page, entre les balises <head> et </head>.
Une fonction se déclare un peu à la manière d'une variable, à l'aide d'un mot-clé (qui est var pour les variables,
souvenez-vous ) : ici, il s'agit de function (eh oui, c'est de l'anglais, d'où cette orthographe).
Pour le nom, c'est comme pour les variables, à savoir les 26 lettres de l'alphabet, en majuscules et en
minuscules (une majuscule étant en JS différente d'une minuscule), le underscore et les chiffres (sauf pour le
premier caractère).
Le nom doit être suivi de parenthèses (même si elles ne contiennent rien), qui vont contenir les éventuels
arguments.
J'attire votre attention sur ces parenthèses. Elles sont indispensables, même si elles sont vides.
function conversion()
Contenu de la fonction
function conversion()
Quel code ? Eh bien celui que la fonction doit exécuter. Si on résume, on veut :
Code : JavaScript
function conversion()
{
var somme = prompt("Entrez la valeur en Euros :");
var resultat = somme * 6.55957;
alert(somme + " E\n" + resultat + " Frs");
}
conversion();
Et vous savez quoi ? Eh bien on peut maintenant l'appeler quand on veut dans notre page !
Insérons une image qui exécutera cette fonction lorsque nous cliquerons dessus.
Pour ceux qui voudraient une image un poil correcte pour notre convertisseur, je vous en
ai concoctée une.
Vous n'avez qu'à faire clic droit > Enregistrer l'image sous...
Nous voulons appeler notre fonction lorsque l'utilisateur cliquera sur l'image. Utilisons
alors le gestionnaire d'événement onclick :
Code : HTML
Et voilà, vous venez de créer un script qui n'est pas totalement inutile .
Les arguments
Revenons à notre fonction de conversion : nous allons lui faire subir quelques modifications.
L'idée est, avec une unique fonction, de pouvoir convertir tout type d'unités.
Par exemple, on peut faire un bouton qui, lorsqu'on cliquerait dessus, convertirait des mètres en centimètres, et une
image convertissant les Euros en Francs.
En y réfléchissant, le code à exécuter serait presque le même, il n'y a que le taux de conversion et le nom des unités
qui changent...
Il nous suffirait, au moment de l'appel de la fonction, de dire : "le taux de change est de 6.55957, et les unités sont
les Euros et les Francs".
Eh bien c'est exactement le même principe : on va indiquer à notre fonction le taux de conversion à utiliser...
On va reprendre notre fonction de conversion, en y apportant quelques modifications : commençons par enlever les
unités (on les ajoutera plus tard), et ajouter un argument : le taux de change.
On pourra ainsi, à partir de cette même fonction, convertir tout ce qu'on veut.
Si on veut convertir des euros en francs, on n'aura qu'à écrire conversion(6.55957).
Pour convertir des mètres en centimètres, ça sera conversion(100) (1 m = 100 cm).
Et on peut même faire un convertisseur belge, avec conversion(1), qui convertit des francs belges (BEF) en francs belges (1 BEF = 1 BEF) !
(désolé pour les belges...).
Il nous suffit de préciser le taux entre les parenthèses. Pratique, pas vrai ?
Allons-y :
tout d'abord, lors de la déclaration de la fonction, il nous faut préciser entre les parenthèses le nom de l'argument :
appelons-le taux.
Lorsqu'on appellera la fonction conversion(6.55957), cela aura pour effet de créer une variable taux avant
d'exécuter la fonction, et cette variable aura pour valeur 6.55957. Elle sera détruite une fois la fonction exécutée.
Et si on veut convertir des mètres en centimètres, pas besoin d'une autre fonction, il suffit de faire comme ceci :
Code : HTML
Il serait tout de même plus agréable de voir s'afficher le nom des unités...
Eh bien il suffit pour cela de créer deux arguments supplémentaires !
Rien de bien compliqué, il faut juste les séparer par des virgules. Vous pouvez les créer dans l'ordre que vous voulez
(essayez cependant d'utiliser un ordre "logique").
Ensuite, lorsque vous appellerez votre fonction, il faudra donner les paramètres dans le même ordre (si le taux de
conversion est le premier, on l'indiquera en premier - logique ).
<p>
<img src="EuroFrancs.png" alt="" onclick="conversion('Euros', 6.55957,
'Frs')" /> <br />
<a href="#" onclick="conversion('m',100,
'cm')">Conversion mètres > centimètres</a>
</p>
Arguments facultatifs
Il est possible de créer des arguments facultatifs : on peut choisir de ne pas les préciser lors de l'appel de notre
fonction.
Par exemple, il serait possible de créer une fonction qui additionne tous les nombres passés en arguments :
Code : JavaScript
Si on ne donne pas de second paramètre, le champ est initialement vide. Mais si on en indique un, alors il aura cette
valeur.
Je vous parle de ces arguments pour que vous sachiez qu'ils existent. Cependant, créer des paramètres facultatifs fait
appel à des notions que vous ne connaissez pas encore. Nous approfondirons donc ce sujet un peu plus tard, dès que
vous aurez les éléments nécessaires.
Comme je vous l'ai annoncé plus haut, les arguments ne sont en fait rien d'autre que des variables, mais propres à la
fonction : elles sont créées lors de son appel, et elles sont détruites à la fin de celle-ci.
tout d'abord, les variables argument1 et argument2 seront créées et prendront comme valeurs respectives le
nombre 57 et la chaîne de caractères 'un message'.
Ensuite, le code de la fonction sera exécuté (ces variables peuvent être modifiées, comme des variables
classiques).
Lorsque la fonction sera terminée, les variables argument1 et argument2 seront détruites.
Essayez donc de créer cette fonction, de l'appeler, et une fois cette dernière terminée, d'afficher la valeur de la
variable argument1 : ça ne marche pas.
C'est normal, elle a été détruite.
Essayez de renouveler l'opération, mais en créant vous-mêmes une variable à l'intérieur de la fonction, comme ceci :
Code : JavaScript
function essai()
{
var variable = 'Bonjour';
}
Appelez ensuite cette fonction, puis affichez la valeur de cette variable, comme ceci :
Code : JavaScript
essai();
alert(variable);
Variable locale
À la fin d'une fonction, toutes les variables déclarées à l'intérieur de celle-ci sont détruites.
On utilise le terme de variables locales.
Notez que j'ai bien parlé de déclaration, ce qui signifie l'utilisation de var.
Mais c'est nul ! Pourquoi on ne peut pas accéder quand on veut et où on veut à toutes les variables ?!
Au moins, avec les variables locales, c'est bien rangé : chaque fonction a ses variables à elle seule, on peut donc les
modifier sans craindre de modifier une variable d'une autre fonction.
Et il suffit d'utiliser les arguments pour passer des valeurs d'une fonction à l'autre.
Variables globales
Il est quand même possible de créer des variables dites globales, c'est-à-dire accessibles depuis n'importe quelle
fonction.
function essai()
{
variable1 = 1;
variable2 = 8;
// modification des variables globales
}
// ces deux variables seront encore accessibles une fois la
fonction terminee
La seconde est de ne pas déclarer la variable avec var : on l'utilise comme si elle avait déjà été déclarée (on
parle de déclaration implicite). L'exemple serait le même que celui du dessus, mais sans les 3 premières
lignes. Les variables sont créées directement dans la fonction.
Personnellement, je préfère utiliser la première solution.
Au risque de me répéter, je vous rappelle qu'il faut privilégier au maximum l'emploi de variables locales...
Valeur renvoyée
Approche
Code : JavaScript
On utilise le signe = : mais comment une fonction peut-elle avoir une valeur ?
Eh bien essayons de créer une fonction f qui fait la même chose que notre fonction mathématique.
function f(x)
Renvoi de la valeur
On a notre fonction et notre résultat, il nous reste plus qu'à dire : "je veux que ma fonction prenne cette valeur". Pour
employer le terme exact, on veut que notre fonction renvoie (ou retourne) cette valeur.
Par exemple, avec prompt, la valeur retournée est le texte tapé par l'utilisateur.
Dans notre cas, c'est le contenu de la variable resultat.
return resultat;
Lorsqu'une fonction retourne une valeur, son exécution se termine : s'il reste du code à exécuter dans cette
fonction, il sera ignoré.
Pour stopper l'exécution d'une fonction, on peut donc utiliser simplement ceci, qui ne renvoie rien, mais termine
l'exécution :
Code : JavaScript
return;
On assemble maintenant tous nos morceaux, voici la fonction f telle qu'on pourrait la coder en JS :
Code : JavaScript
function f(x)
{
var resultat = 5*x - 3;
return resultat;
}
alert( f(7) );
Quelques exemples
De cette manière, vous pouvez créer toutes sortes de fonctions (particulièrement mathématiques ).
Voici quelques exemples :
Voici la correction (vous pouvez faire différemment, avec une variable par exemple) :
Secret (cliquez pour afficher)
Code : JavaScript
function triple(x)
{
return 3*x;
}
function carre(x)
{
return x*x;
}
function cube(x)
{
return x*x*x;
}
Pour s'entraîner
Voici un exercice que vous pouvez réaliser : une mini-calculatrice, demandant deux nombres et affichant les résultats
des 4 opérations "de base" (addition, ...), en créant une fonction pour chaque opération (même si c'est inutile, c'est un
entraînement).
L'indentation
Je vais terminer ce chapitre sur un point tout simple, mais qui a son importance.
Vous avez peut-être remarqué que dans le code de la fonction, certaines lignes sont en retrait par rapport aux autres :
cela s'appelle l'indentation.
Cela consiste à décaler certaines parties du code (mais pas n'importe lesquelles), de manière à le rendre plus lisible.
C'est assez dur à expliquer, mais cela reste très simple d'utilisation, comme vous le verrez au cours des exemples de
ce tutoriel.
Le code se rassemble en "groupes" (la plupart du temps, ils correspondent aux blocs d'instructions).
L'indentation consiste à décaler tout le code de ce "groupe" d'une tabulation.
Exemple
instruction1;
instruction2;
instruction3;
instruction4;
instruction5;
Espaces ou tabulation ?
Pour modifier ce nombre d'espaces avec Notepad++ : menu Paramétrage > Préférence... > onglet MISC > Taille de tab.
Pour ceux qui voudraient plus d'exemples à propos de l'indentation et des différents "styles", je vous encourage à
visiter cette page wikipédia.
Q.C.M.
Une fonction :
possède toujours des parenthèses après son nom (lorsqu'on la déclare ou qu'on l'appelle)
Une fonction :
Vrai ou faux ?
Il vaut mieux utiliser des variables globales que des variables locales, car on peut y accéder depuis n'importe quelle
partie de notre script.
est inutile
Ce chapitre vous a apporté beaucoup d'éléments nouveaux, qui sont à la base de la programmation : en effet, les
fonctions forment une notion clé, indispensable dans la création de scripts un minimum élaborés.
Si vous ne vous sentez pas très à l'aise avec ce concept, n'hésitez pas à relire ce chapitre et surtout à vous exercer sur
des sujets que vous voulez.
Un petit proverbe pour conclure : c'est en forgeant que l'on devient forgeron...
Les conditions
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 1 271 874
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Pour le moment, nos scripts ne sont vraiment pas très élaborés. Mais dans ce chapitre nous allons passer un cap,
puisque nous allons écrire des programmes qui seront capables de prendre des décisions (comme des grands ).
Je m'explique... nous allons par exemple écrire un script qui demande l'âge à l'utilisateur, et qui affichera ensuite le
message "vous êtes majeur" ou "vous êtes mineur", selon le cas.
C'est grâce à des conditions que le navigateur pourra réagir différemment selon certaines données.
Sommaire du chapitre :
Les booléens
Opérateurs et conditions
Des conditions plus élaborées
La négation
IF et ELSE
La fonction isNaN
Distinguer plusieurs cas avec SWITCH
Q.C.M.
Les booléens
Vous savez qu'une variable peut contenir un nombre ou une chaîne de caractères.
Mais elle peut également contenir d'autres données : celle que nous allons aborder s'appelle un booléen.
Il s'agit de traiter des informations qui peuvent prendre deux valeurs (par exemple "vrai" ou "faux"), ce qui est très
utilisé, particulièrement en électronique et en informatique : soit il y a du courant (première valeur), soit il n'y en a
pas (deuxième valeur).
Variable booléenne
Il est possible de créer des variables contenant de telles valeurs (pour enregistrer par exemple le résultat d'un test).
Ces variables prennent deux valeurs : true (vrai) et false (faux).
Un petit exemple : cette variable pourrait permettre de savoir si le visiteur est majeur ou mineur (la valeur serait à
demander au visiteur) :
Code : JavaScript
Opérateurs et conditions
Il serait bien de pouvoir comparer des variables entre elles pour déterminer la valeur d'une variable booléenne.
Par exemple, si l'âge du visiteur est inférieur à 18 ans, alors on retient qu'il n'est pas majeur, sinon on retient qu'il est
majeur.
Opérateurs de comparaison
Retenez donc bien que pour comparer deux valeurs, on emploie le signe ==.
Opérateurs de comparaison de valeurs numériques (si les valeurs ne sont pas des nombres, le résultat ne sera pas celui
attendu) :
a < b : si a est inférieur à (plus petit que) b, alors on a true, sinon false.
a > b : si a est supérieur à (plus grand que) b, alors on a true, sinon false.
a <= b : si a est inférieur ou égal à b, alors on a true, sinon false.
C'est le contraire de > : si a n'est pas supérieur à b, ...
a >= b : si a est supérieur ou égal à b, alors on a true, sinon false.
C'est le contraire de < : si a n'est pas inférieur à b, ...
Revenons à notre exemple : on a une variable age contenant l'âge du visiteur, et on veut en déduire la valeur de la
variable booléenne majeur.
Pas très difficile avec ces opérateurs : on est majeur si on a 18 ans ou plus.
On écrira donc :
Code : JavaScript
Les parenthèses autour de la condition ne sont pas nécessaires, mais elles rendent le code beaucoup plus
lisible (à mon goût ).
Libre à vous de les mettre ou non.
Et si on veut une variable costaud qui sera vraie lorsque le visiteur mesurera plus de 2 mètres et qu'il pèsera
plus de 90 kgs ?
Eh bien c'est ici que deux nouveaux opérateurs entrent en scène, des opérateurs logiques.
Vous avez vous-mêmes prononcé le nom de l'un d'eux : il s'agit de l'opérateur ET. Le second est l'opérateur OU.
En JS, on les note && (ET) et || (OU) ; vous formez ce "|" en appuyant deux fois sur Alt Gr + 6 sur un clavier AZERTY
français, et Alt Gr + 1 sur un belge.
ET
On veut une variable costaud qui sera vraie lorsque le visiteur mesurera plus de 2 mètres et qu'il pèsera plus de 90
kgs.
On pourrait créer deux valeurs booléennes contenant les résultats de ces deux tests, et ensuite créer notre variable
costaud, mais faisons cela en une seule fois.
Il faut que les deux conditions soient vraies, d'où l'emploi de ET.
On obtient :
Code : JavaScript
(Je n'ai pas mis d'espace de part et d'autre des signes >= pour mieux faire ressortir les deux conditions : encore une
fois, libre à vous d'en mettre où bon vous semble.)
OU
On veut maintenant faire le même script, mais avec une personne de plus de 2 mètres OU de plus de 90 kgs.
Une petite modification : on emploie || au lieu de &&.
Ici, il suffit qu'une seule condition soit vérifiée pour que le message s'affiche, c'est pourquoi on emploie OU.
Notez que si les deux conditions sont vérifiées, ça marche aussi .
En l'absence de parenthèses, les && sont prioritaires sur les || : on commence par eux.
Code : Autre
En présence de parenthèses, comme pour des calculs, les éléments entre ces dernières sont calculés avant le reste.
La négation
Symbole "NON"
Après longue réflexion, vous m'affirmez que c'est simplement l'opposé de cette condition.
On a ici "si l'âge est supérieur ou égal à 18 ans".
Mais on veut "si l'âge n'est PAS supérieur ou égal à 18 ans".
Eh bien ce "PAS" existe : il s'agit du symbole ! (comme j'ai pu vous l'annoncer avec le signe !=, signifiant "pas égal").
Il précède la condition, comme ceci :
Code : JavaScript
C'est tout .
Enfin presque, j'allais oublier la table de vérité (certes toute simple) :
a !a
0 1
1 0
Théorème de De Morgan
Il nous vient d'un certain Auguste (ou Augustus) De Morgan, mathématicien britannique du dix-neuvième siècle, qui est,
avec Boole (eh oui ), le fondateur de cette logique binaire (booléenne).
Mais ce qui nous intéresse maintenant plus particulièrement, ce sont les lois qu'il a formulées...
Plutôt que de vous les énoncer "bêtement", nous allons les retrouver ensemble.
Illustration
Vous êtes végétariens : vous mangez de tout, sauf de la viande et du poisson (si ce n'est pas le cas, on va faire comme
si ).
Vous arrivez à un repas, vous vous dites : "je mange s'il n'y a PAS de viande ET PAS de poisson".
Ou bien : "je mange s'il n'y a PAS : (du poisson OU de la viande)".
!a && !b
!(a || b)
Ce qui nous prouve les lois de De Morgan (formulées ici avec les notations du JS) :
Citation : lois de De Morgan
1) !(a || b) = !a && !b
2) !(a && b) = !a || !b
Code : Autre
IF et ELSE
Eh bien il est possible de faire un test : c'est-à-dire que si une variable booléenne vaut true, alors on effectue une
action, et si elle vaut false, on n'en effectue pas (ou une autre).
IF
Pour commencer, nous allons reprendre notre code avec la variable majeur :
Code : JavaScript
Ce que nous voulons maintenant, c'est afficher un message SI la personne est majeure.
En anglais, le "si" nous donne "if"... c'est justement ce qu'on utilise pour faire un test :
Code : JavaScript
if(valeur_booleene)
Si la valeur booléenne est true, alors l'instruction qui suit le test est exécutée.
Sinon, elle est ignorée et on passe à la suite.
Si on veut mettre plusieurs instructions avec un seul if, on les place entre accolades pour former un bloc
d'instructions, qui sera exécuté seulement si le test est vrai.
Voici ce même code, mais avec un bloc d'instructions (indispensable s'il y a plusieurs instructions à exécuter si le test
est vrai, facultatif s'il n'y en a qu'une comme ici) :
Code : JavaScript
if(majeur)
{
alert('Vous êtes majeur');
// instructions dans le bloc a placer ici
}
On n'est pas obligés de stocker le résultat du test, on peut l'utiliser directement dans le if() de cette manière :
Code : JavaScript
C'est généralement comme ça qu'on fait, sauf lorsqu'on a besoin de conserver le résultat.
Et pour faire encore plus court, on peut encore se passer de la variable age : on teste directement la valeur entrée par
l'utilisateur :
Code : JavaScript
ELSE
Si le test est faux, nous avons vu que l'instruction (ou le bloc d'instructions) qui suit est ignoré(e), et que le script
continue après celui (celle)-ci.
Il est également possible d'effectuer une instruction ou un bloc d'instructions si la condition est fausse : il (elle) sera
ignoré(e) à son tour si le test est vrai.
Reprenons notre code, mais qui affichera cette fois-ci un message aux mineurs :
Code : JavaScript
Ce qui se "traduit" par : SI l'âge est supérieur ou égal à 18, alors on affiche que le visiteur est majeur, SINON on affiche
qu'il est mineur.
if(age)
// instruction ici
var age;
La variable vaut 0 (zéro - ATTENTION, la valeur '0' - zéro, mais sous forme de chaîne de caractères - ne rentre
pas dans cette liste !).
La variable vaut null.
La variable vaut null (valeur renvoyée par certaines fonctions dans certains cas).
Exemple : lorsqu'on demande l'âge, il y a un bouton "Annuler" à coté du bouton "Valider". En cliquant dessus, la
variable age contiendra la valeur '' (chaîne de caractères vide).
On peut donc se servir de ce test pour vérifier que l'utilisateur n'a pas cliqué sur "Annuler".
Code : JavaScript
La fonction isNaN
Présentation
Continuons avec une fonction qui a bien sa place dans ce chapitre : isNaN (à première vue, un joli nom ), qui
prend un seul argument.
Elle a bien sa place ici, car elle retourne une valeur booléenne.
Derrière un nom qui peut sembler bizarre, il n'y a en fait rien de compliqué.
Petit exemple
Code : JavaScript
Vous remarquerez au passage que les valeurs null (lorsque vous cliquez sur "Annuler") et '' (chaîne vide - lorsque vous
laissez le champ vide) prennent la valeur numérique 0.
Et si on a besoin de tester plusieurs valeurs ? On est obligé de faire plusieurs if les uns à la suite des autres ?
Mais cette solution devient particulièrement lourde à écrire et peu lisible lorsqu'on a beaucoup de possibilités.
Rassurez-vous cependant, lorsque je dis "vieux navigateurs", il s'agit dans ce cas de Internet Explorer 3.0 et de
Netscape Navigator 3.0 (et versions antérieures)... Ce qui permet donc de relativiser le problème de compatibilité.
Explications...
On pourrait dire qu'ils n'ont qu'une différence, mais qui est radicale. Dans le cas d'un if, le "truc" entre les
parenthèses est un booléen (il est soit vrai, soit faux) : on a donc seulement deux cas possibles.
Pour un switch, c'est... une variable quelconque (dans notre cas, il s'agit d'une chaîne de caractères) : on a donc une
infinité de cas possibles...
Comment ça marche ?
On commence par dire qu'on veut étudier la valeur d'une variable, grâce à switch(variable), qu'on fait suivre
d'accolades pour en délimiter le corps.
Pour ce qui est du corps (le "contenu" de notre switch), on utilise le même modèle pour chaque cas possible :
Code : JavaScript
case VALEUR:
INSTRUCTIONS
break;
Le case VALEUR indique au navigateur qu'il doit commencer à partir de cette ligne si la variable vaut VALEUR.
Le navigateur va donc exécuter toutes les instructions se trouvant dans les lignes qui suivent, jusqu'à trouver
l'instruction break, qui va forcer le navigateur à sortir du switch (délimité par les accolades).
Il est possible de ne pas mettre ce break : dans ce cas, les instructions suivantes (celles du cas suivant) seront
exécutées elles aussi. (Vous verrez cela dans l'exemple suivant.)
Dans le cas où il n'existe pas de case correspondant à la valeur de la variable, le code qui se trouve à partir de
default: (qui doit être placé après les autres cas) sera exécuté.
switch(variable)
{
case VALEUR_1:
INSTRUCTIONS;
break;
case VALEUR_2:
INSTRUCTIONS;
break;
/* etc... */
default:
INSTRUCTIONS;
break;
}
Autre exemple
case "hamburger":
alert("Yeah, do you come from the USA ?!");
break;
Q.C.M.
Quel est le symbole <= ?
Il n'existe pas en JS
Code : JavaScript
true
false
Code : JavaScript
if(heure<7 || 22<heure)
alert ("Il fait nuit.");
else
alert ("Il fait jour.");
Il fait jour.
Il fait nuit.
Les conditions sont très courantes en JS : puisqu'on se base sur les données fournies par le client, on aura bien souvent
besoin de leur faire subir quelques tests.
Vous le verrez par la suite, nous allons les employer très souvent.
Prenez donc le temps de bien comprendre leur fonctionnement avant de passer au prochain chapitre .
Les boucles
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 650 395
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Dans le chapitre précédent, vous avez découvert les conditions et leur utilisation à travers des tests "Si... alors...
sinon...".
En guise de présentation, vous allez réaliser un petit exercice pour faire connaissance avec les boucles.
Votre mission, si toutefois vous l'acceptez : afficher la liste de tous les nombres plus petits que 10 (une boite de
dialogue par nombre).
alert(1);
alert(2);
alert(3);
alert(4);
alert(5);
alert(6);
alert(7);
alert(8);
alert(9);
Pour éviter de s'ennuyer en programmant (on est quand même là pour s'amuser ), nous allons apprendre une autre
méthode, beaucoup plus puissante, pour arriver au même résultat.
Ce qu'il faudrait, c'est pouvoir demander à l'ordinateur de "compter", et tant qu'il n'a pas atteint 10, d'afficher la
valeur.
Eh bien c'est sur ce modèle que sont conçues ce qu'on appelle les boucles : on répète une action tant que une
condition est satisfaite.
Pourquoi les boucles ? Car il en existe plusieurs différentes, qui s'utilisent dans des situations elles aussi différentes.
Boucle "while"
Syntaxe et fonctionnement
En voici la syntaxe :
Code : JavaScript
while(condition)
{
instructions
}
Boucle "for"
Les boucles while sont, comme vous venez de le voir, très "basiques" : la syntaxe est on ne peut plus simple !
Lors de leur utilisation, il est très fréquent d'utiliser un compteur, comme nous l'avons fait dans l'exemple précédent.
Ce compteur, qui n'est rien d'autre qu'une variable (souvent appelée i, mais ce n'est pas une obligation, même si c'est
pratique à écrire ), est ensuite incrémenté (ou décrémenté) à chaque tour de boucle.
var i;
i = 0; // initialisation
while(i < 10) // condition
{
alert(i); // action
i++; // incrementation
}
Mais ça ne serait pas plus pratique avec une boucle qui regroupe tout ça ?
Eh bien justement si, et c'est le but de cette nouvelle boucle, que nous allons étudier dans les paragraphes suivants...
Sa syntaxe ?
Code : JavaScript
Ce sont bien des points-virgules qui se trouvent entre les parenthèses après le for.
Attention à ne pas les confondre avec des virgules, qui sont utilisées pour séparer les arguments des fonctions.
Et encore plus pratique : on peut déclarer la variable i directement dans le for, comme ceci :
Code : JavaScript
Un peu de pratique
Les boucles for sont plus pratiques que les boucles while, mais uniquement dans certains cas !
Il est parfois plus judicieux d'utiliser une boucle while, notamment lorsqu'on ne retrouve pas cette structure
"initialisation / condition / incrémentation" (nous en verrons des exemples par la suite).
Petit exemple
Vous devriez maintenant être capables de faire une boucle (on va utiliser for) qui fait la somme des nombres de 1 à
10 (inclus).
Je vous laisse faire, cela ne devrait pas vous poser de problème.
Code : JavaScript
var i;
var somme = 0; // variable pour le resultat
for(i=1; i<=10; i++)
somme += i; // on ajoute la valeur du
compteur à notre resultat
alert(somme);
Ce qui est rigolo avec les boucles for, c'est qu'on peut mettre tout plein de trucs dans les parenthèses.
Et avec une indentation "excentrique", ainsi qu'avec des noms de variables qui ne veulent rien dire, on obtient des
résultats vraiment géniaux .
Voyez plutôt :
Code : JavaScript
var azerty=0,arezty;
for(arezty=0;azerty<10;arezty+= azerty=1 +azerty);alert(arezty);
évitez de modifier la variable qui sert de compteur à l'extérieur des parenthèses du for, qui sont prévues pour
ça.
Inversement, évitez de mettre entre ces parenthèses du code qui ne concerne pas directement cette variable.
Pour rappel, donnez des noms explicites et pas trop longs à vos variables (i ou j, parfois cpt, étant des noms
classiques pour des compteurs).
Pensez également à bien indenter votre code, et à mettre quelques commentaires, (uniquement) s'ils s'avèrent
nécessaires.
La syntaxe
do
{
instructions
}
while(condition);
Ici, le while est placé à la fin de la boucle, après les instructions qui le concernent : c'est pour ça qu'il est
suivit d'un point-virgule.
Comment ça marche ?
Quelle différence ?
Eh bien le test est effectué après les instructions, ce qui veut dire que
ces dernières seront exécutées au moins une fois, quelle que soit la condition (cf. le petit schéma ci-contre).
Un petit exemple...
Une des utilisations possibles : on demande des noms à l'utilisateur (avec prompt()) tant qu'il ne clique pas sur
"Annuler" (ou qu'il ne laisse pas le champ vide).
Pour l'instant, on ne va pas s'occuper d'enregistrer tous les noms qu'il a tapés.
var saisie;
do
saisie = prompt("Entrez un nom, ou cliquez sur Annuler pour
quitter");
while(saisie != null && saisie != '');
var saisie;
do
saisie = prompt("Entrez un nom, ou cliquez sur Annuler pour
quitter");
while(saisie); // ca revient au meme que dans l'exemple ci-dessus
Instructions de contrôle
Après avoir fait le tour des boucles (sans jeu de mot ), nous allons aborder un dernier point dans ce chapitre : les
instructions de contrôle, qui ne sont rien d'autre que des instructions qui agissent sur les boucles.
break
Comment ça marche ?
La première, qui se prénomme break (ce qui signifie "casser" pour les non-anglophones), est très simple d'utilisation.
Elle arrête immédiatement la boucle dans laquelle elle se trouve (le script continue normalement, en reprenant juste
après la boucle en question).
Petit exemple :
Code : JavaScript
var i;
for(i=0; i<20; i++)
{
if(3*i > 10)
break;
alert(3*i);
}
Cependant, elle est à éviter autant que possible : il vaut mieux créer une condition plus complète pour votre boucle,
plutôt que d'insérer des if avec des break dans toute la boucle.
L'exemple plus haut est correct du point de vue de la syntaxe, mais c'est exactement l'utilisation qu'il ne faut pas faire
de break.
Voici une manière bien mieux structurée pour ce même exemple :
Code : JavaScript
var i;
for(i=0; 3*i<=10; i++)
alert(3*i);
Ici, tout ce qui concerne la boucle se trouve entre les parenthèses du for, ce qui rend le code bien mieux "organisé".
Et si on met un break à l'intérieur d'une boucle, qui est elle-même à l'intérieur d'une autre boucle ?
Dans l'exemple qui suit, le break s'applique seulement à la boucle avec la variable j.
Code : JavaScript
var i, j;
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
if(j == 2)
break;
}
}
continue
Fonctionnement...
Lorsque l'instruction continue est rencontrée, toutes les instructions qui suivront seront ignorées, jusqu'à ce qu'on
arrive à la fin des instructions de la boucle. La boucle continue ensuite normalement.
Pour simplifier, continue permet en quelque sorte de "sauter" certains tours de la boucle.
... et exemple
var i;
for(i=-5; i<=5; i++)
{
if(i == 0)
continue;
alert("L'inverse de " + i + " est " + 1/i);
}
Lorsque i vaut 0, on saute les instructions qui restent dans la boucle (ici, alert()), puis on reprend avec i = 1 (la
valeur suivante).
On affiche donc le message pour i = -5, -4, -3, -2, -1, (on saute le 0), 1, 2, 3, 4 et 5.
Application
Bien, il est temps de mettre un peu en pratique ce que vous venez d'apprendre.
Exercice
Le script que vous allez créer est un script du SdZ... Oui, vous avez bien entendu ! C'est un script qui est utilisé sur ce
site .
Le sujet
Notre script a pour rôle de demander le contenu de chaque puce à l'utilisateur, et de créer le zCode correspondant.
<liste>
<puce>Contenu de la puce 1</puce>
<puce>Contenu de la puce 2</puce>
...
</liste>
À vous de jouer .
Correction
Je n'ai pas fait une, mais plusieurs corrections, plus ou moins bonnes.
// initialisations
var zCode = '<liste>\n';
var saisie = '';
// boucle
do
{
saisie = prompt("Contenu de la puce ?");
if(saisie)
zCode += "<puce>" + saisie + "</puce>\n";
}while(saisie);
// fin
zCode += "</liste>";
alert(zCode);
<liste>
</liste>
Certes, un "détail", mais si facile à corriger que c'est dommage de le laisser comme ça.
Autre remarque : à quelques lignes près, on voit deux fois le même test : if(saisie) et while(saisie).
Ce n'est jamais bien bon de se répéter (par exemple, si on doit modifier la condition, c'est un peu relou de le faire
deux fois ).
Si on veut modifier ça, il va falloir enregistrer la saisie dans une variable, pour l'ajouter au zCode uniquement au tour
de boucle suivant (une fois que le test de la boucle aura été fait)... Ce qui complique un peu l'affaire.
Version 1 améliorée
Voici le même code, après avoir modifié les problèmes soulignés ci-dessus.
Code : JavaScript
do
{
// on ajoute le texte saisi au tour precedent
zCode += texte;
// on demande du texte et on enregistre dans la variable
"temporaire"
saisie = prompt("Contenu de la puce ?");
texte = "<puce>" + saisie + "</puce>\n";
}while(saisie);
// le 1er "detail"
if(zCode == '<liste>\n')
zCode = '';
else
zCode += "</liste>";
alert(zCode);
Version 2 : tout-en-un
Une autre solution consisterait à enregistrer et à tester en même temps le texte saisi.
var saisie;
while(saisie = prompt("Texte"))
// instructions
var saisie;
while( (saisie=prompt("Texte")) == true )
// instructions
Il faut bien comprendre que cette condition (appelée à chaque tour de boucle) se compose de deux étapes :
tout d'abord, l'instruction saisie = prompt("Texte"), que vous comprenez maintenant sans difficulté.
Ensuite, le test, avec la nouvelle valeur de la variable modifiée ci-dessus.
Code : JavaScript
// initialisation
var zCode = "<liste>\n";
var saisie;
// boucle
while(saisie = prompt("Contenu de la puce ?"))
zCode += "<puce>" + saisie + "</puce>\n";
// finitions
if(zCode == '<liste>\n')
zCode = '';
else
zCode += "</liste>";
alert(zCode);
Q.C.M.
Un peu de vocabulaire...
Code : JavaScript
i++;
Une modification
Un changement
Une incrémentation
Une augmentation
Un truc bizarre
Quel type de boucle est-il le plus judicieux d'utiliser pour afficher la table de multiplication par 5 ?
while
do... while
for
if
Code : JavaScript
var texte;
do
texte = prompt("Tapez ce que vous voulez");
while(isNaN(texte));
tape un nombre.
Code : JavaScript
Il va nous demander du texte, l'enregistrer dans la variable, et exécuter les instructions. Et ceci, tant qu'on ne laisse
pas le champ vide (et qu'on ne clique pas sur "Annuler").
Nous avons maintenant fait le tour de l'utilisation des tests : ceci nous rapproche beaucoup de la fin de cette première
partie consacrée à la syntaxe du JS.
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 598 843
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Plus que quelques chapitres avant de clore cette première partie, qui traite des bases du JavaScript. Il est maintenant
temps de mettre en pratique ce que vous avez appris jusqu'ici : ce chapitre va vous y aider.
Au programme, la création du jeu "Plus ou moins", que vous connaissez sûrement si vous avez déjà lu d'autres tutos sur
ce site (c'est l'étape juste après le "hello world" ).
Sommaire du chapitre :
Présentation des TD
Les consignes
Correction
Amélioration 1 : jouer plusieurs fois de suite
Amélioration 2 : quelques finitions
Code final
Présentation des TD
Pourquoi des TD ?
Avant de nous lancer dans le sujet, donnons quelques explications à propos des TD (Travaux Dirigés).
Ces chapitres ont pour but de vous faire pratiquer le JS : c'est de cette manière que vous retiendrez le mieux ce que
vous avez appris, et c'est également de cette façon que vous vous rendrez compte des points "sensibles" auxquels il
faudra faire particulièrement attention.
Je vous conseille donc de consacrer un peu de temps à ces TD, surtout s'ils concernent des notions que vous ne
maîtrisez pas très bien. Ils sont, à mon avis, tout aussi importants que les autres chapitres.
Comment ça se passe ?
Notez que c'est un plan général, qui variera plus ou moins d'un TD à l'autre.
Les consignes
Le jeu
Passons sans plus attendre au sujet de ce TD. Comme je vous l'ai dit dans l'introduction, il s'agit du jeu "Plus ou
moins".
Le principe est simple : l'ordinateur choisit un nombre au hasard, plus petit ou égal à 100.
Le but est de deviner ce nombre. À chaque fois qu'on propose un nombre, on indique si le nombre à deviner est plus
petit ou plus grand que celui-ci.
Les consignes
Pour l'instant, on place le code directement dans le code de la page, sans créer de fonction.
En JS, il n'existe pas de fonction "simple" donnant un nombre entier aléatoire, il faut la créer.
Vous apprendrez cela d'ici quelques chapitres, il vous manque quelques notions pour l'instant.
Je vais donc vous donner la fonction.
Code : JavaScript
(Pour rappel, une déclaration de fonction se place dans l'en-tête de la page web.)
Cette fonction renvoie un nombre entier choisi aléatoirement entre min et max (inclus).
Un exemple d'utilisation pour simuler un lancé de dé :
Code : JavaScript
La seconde étape consiste à demander des nombres, et à afficher à chaque fois si le nombre à deviner est plus grand
(plus) ou plus petit (moins), jusqu'à ce que l'utilisateur ait trouvé le bon nombre.
On ne va utiliser que des prompt, pour éviter que l'utilisateur ne clique 50 fois sur "OK" à chaque partie .
Premier message
Fin de la partie
On affiche un message annonçant à l'utilisateur qu'il a gagné (c'est quand même la moindre des choses ), en lui
indiquant combien de coups il lui a fallu.
À vous !
C'est tout pour les consignes, il ne reste plus qu'à coder tout ça .
Avant de vous jeter sur votre clavier, réfléchissez donc à la manière dont vous allez créer votre script (quelle boucle
utiliser, etc.) ; et si vous bloquez, n'hésitez pas à lire la suite (les explications, pas la correction ).
Correction
Avant de vous donner une correction, expliquons comment procéder pour réaliser ce script.
Par où commencer ?
Structure du script
Ici, pas besoin de créer de fonctions, l'énoncé précise que le code sera placé directement dans le corps de la page.
La boucle
Pour rappel, la principale différence entre ces deux boucles vient du fait que l'action est exécutée avant la
condition dans le cas de do... while.
Avec while, la condition est d'abord évaluée, et ensuite seulement on exécute l'action.
Les variables
De plus, lorsqu'on demandera un nombre à l'utilisateur, le message à afficher dépendra du nombre qu'il a saisi avant.
On va donc créer une variable, nommée msg qui contiendra le message qu'il faudra afficher la prochaine fois qu'on
demandera un nombre.
Correction
À partir du travail fait ci-dessus, ce n'est pas trop dur d'écrire le script.
Voici ce que ça donne (il faut donc placer ce code dans le corps de la page) :
Code : JavaScript
do
{
saisie = prompt(msg);
cpt++;
// message a afficher au prochain tour :
if(saisie > nb)
msg = "C'est moins";
else
msg = "C'est plus";
}
while(saisie != nb);
N'oubliez pas de déclarer la fonction nb_aleatoire (que je vous ai donnée plus haut) dans l'en-tête de la
page.
Petite présentation
Notre script, qui permet de jouer une partie de "Plus ou moins", est maintenant fonctionnel.
L'amélioration que je vous propose de réaliser va permettre de jouer plusieurs parties à la suite, en affichant, une fois
le jeu terminé, votre meilleur score (votre plus petit nombre de tentatives).
La première modification (d'une difficulté facilité sans précédent ) va consister à créer une fonction (on va
l'appeler PoM_manche), qui jouera une manche de PoM, et qui renverra le score (au lieu de l'afficher). C'est donc, à
quelques modifications près, le code que vous avez réalisé.
Pour plus de possibilités par la suite, on va donner deux paramètres, mini et maxi, à cette fonction, et le nombre
qu'il faudra deviner sera compris entre ces deux valeurs (incluses).
Ensuite, on va jouer plusieurs manches, en demandant à la fin de chacune si l'utilisateur souhaite rejouer.
Une fois la partie terminée, on affichera le nombre de manches jouées et le meilleur score.
Fin de partie
Réalisation du script
Structure
Notre programme va donc avoir une structure semblable à la précédente : il sera basé sur une boucle. Cette boucle
sera encore une fois do... while, car la condition ("Rejouer ?") vient après la manche jouée.
Création de la fonction
PoM_manche
ne plus appeler alert, mais utiliser return pour renvoyer le nombre de coups
ne plus utiliser 1 et 100 pour le choix du nombre, mais mini et maxi (penser aussi à modifier le premier
message).
Code : JavaScript
do
{
saisie = prompt(msg);
cpt++;
if(saisie > nb)
msg = "C'est moins";
else
msg = "C'est plus";
}
while(saisie != nb);
return cpt;
}
do
{
score = PoM_manche(1, 100);
cpt++;
if(score < best_score || best_score == 0)
best_score = score;
continuer = confirm("Bravo, tu as gagne en " + score + "
coups.\nVeux-tu rejouer ?");
}
while(continuer);
But de l'amélioration
on va créer une fonction, PoM_partie, qui jouera une partie de PoM (à partir du code de l'amélioration 1). Elle
retournera le meilleur score (en plus de l'afficher).
On précisera à cette fonction (en argument) les valeurs entre lesquelles choisir le nombre aléatoire.
On va prendre en compte le bouton "Annuler" lorsqu'on demande de saisir un nombre : il arrête la manche en
cours, affiche le meilleur score des autres manches, et quitte la partie.
L'avantage des deux premiers points est que l'on pourra lancer le jeu à partir d'un lien sur la page, et qu'on pourra
proposer plusieurs niveaux de difficulté (en prenant un nombre compris entre 1 et 250, par exemple).
Réalisation
Manière de procéder
L'utilisation de return au milieu d'une fonction, tout comme break dans une boucle, est à éviter.
Toutefois, nous avons estimé qu'elle était justifiée dans ce cas : le but du bouton "Annuler" est d'arrêter
immédiatement ce qui se passe, d'où une telle utilisation.
Une manière de l'éviter est d'utiliser une variable booléenne, comme la variable "continuer" dans
l'amélioration 1.
Le code est alors un peu plus "lourd", mais mieux organisé (l'arrêt de la boucle se fait par la condition, et non pas par
du code contenu quelque part dans la boucle).
Revenons à nos moutons : la fonction PoM_manche va donc renvoyer 0 quand on annule la partie.
Dans ce cas, on ne demande pas à l'utilisateur s'il veut continuer (puisqu'il a annulé ), mais on va régler la variable
continuer à false (ce qui aura le même effet que si on lui avait demandé et qu'il avait refusé).
Script
do
{
saisie = prompt(msg);
// si "Annuler"
if(saisie == null)
return 0;
cpt++;
if(saisie > nb)
msg = "C'est moins";
else
msg = "C'est plus";
}
while(saisie != nb);
return cpt;
}
... et PoM_partie :
Code : JavaScript
do
{
score = PoM_manche(min, max); // joue la manche
if(score)
{
cpt++;
if(score < best_score || best_score == 0)
best_score = score;
continuer = confirm("Bravo, tu as gagne en " + score + "
coups.\nVeux-tu rejouer ?");
}
else
continuer = false;
}
while(continuer);
Code final
Pour ceux qui le désirent, voici le code final de la page.
Il y a donc 3 liens, correspondant à 3 niveaux de difficulté.
Code : JavaScript
<script type="text/javascript">
<!--
do
{
saisie = prompt(msg);
// si "Annuler"
if(saisie == null)
return 0;
cpt++;
if(saisie > nb)
msg = "C'est moins";
else
msg = "C'est plus";
}
while(saisie != nb);
return cpt;
}
do
{
score = PoM_manche(min, max); // joue la manche
if(score)
{
cpt++;
if(score < best_score || best_score == 0)
best_score = score;
continuer = confirm("Bravo, tu as gagne en " + score + "
coups.\nVeux-tu rejouer ?");
}
else
continuer = false;
}
while(continuer);
Si vous l'avez réussi tout seuls, félicitations : vous avez acquis les bases, ce qui vous permettra sans doute d'être à
l'aise pour la suite.
Sinon, ne paniquez pas : l'essentiel est de comprendre le raisonnement, la correction est là pour vous guider et vous
faire comprendre. Ceci dit, si vous êtes dans ce cas, il serait bien (pour vous faciliter la chose par la suite) que vous
réalisiez les exemples des chapitres précédents : on retient mieux ainsi qu'en lisant simplement un tuto.
Les tableaux
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 574 799
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Nous allons attaquer ici une notion très importante en programmation : les tableaux.
Pour expliquer de manière simple, disons qu'un tableau permet de stocker et d'avoir accès à beaucoup de données.
Utiliser un tableau, c'est un peu comme utiliser plein de variables, mais en beaucoup plus pratique ; en effet, on n'est
pas obligés de s'occuper de ces variables une par une : on va utiliser une boucle à la place, ce qui va nous simplifier
grandement la tâche.
Un petit exemple ?
Vous voulez réaliser un jeu (pourquoi pas le "Plus ou Moins" ) multi-joueurs : vous allez donc enregistrer le nom des
joueurs.
Tout ça pour vous montrer que les variables, c'est bien beau, mais qu'on a parfois besoin de plus "gros" : eh bien les
tableaux sont justement là pour ça.
Sommaire du chapitre :
Pour reprendre l'exemple du jeu multijoueur, il serait bien pratique de pouvoir "numéroter" des variables. Ensuite, ça
sera facile d'accéder au nom du énième joueur grâce aux numéros.
C'est ce que nous permettent les tableaux : schématiquement, il contiennent des "cases" portant des numéros, et on
peut facilement accéder à une case (autrement dit, lire ou modifier le contenu) à partir de son numéro.
En JavaScript, comme dans de nombreux autres langages de programmation, on commence à compter à partir
de 0 !
La première case portera donc le numéro 0, et la énième case le numéro n-1.
Le vocabulaire...
Plutôt que de parler de "cases" et de "numéros", employons dès maintenant les termes exacts.
Au lieu de parler de la "case portant le numéro i" (ça fait un peu tiercé ), on va donc dire l'élément d'indice i.
Comment ça marche ?
Créer un tableau
Pour créer un tableau, on utilise new Array() (qui signifie en anglais "nouveau tableau").
C'est marrant ces parenthèses, c'est comme pour les fonctions... (on en reparle dans quelques chapitres, voulez-vous ? )
Pour créer un tableau et l'enregistrer dans une variable (sinon ça ne sert pas à grand chose de l'avoir créé...), on fait
comme on en a l'habitude :
Code : JavaScript
l'ordinateur crée un tableau en mémoire (on lui en a donné l'ordre avec new).
Il va également créer une variable dans sa mémoire (on lui a demandé avec var).
Mais schématiquement, voilà ce qui va se passer : en fait, on ne va pas "mettre" le tableau dans la variable (ça
ne rentrerait pas, une variable, c'est trop petit). On va dire à la variable où se situe notre tableau dans la
mémoire de l'ordinateur (c'est beaucoup plus facile comme ça).
Je vous explique ceci pour que vous puissiez comprendre ce qui se passe lorsque vous "copiez" un tableau...
Code : JavaScript
Ces deux variables contiennent donc "l'emplacement" du tableau créé : elle désignent donc le même tableau !
Si on le modifie avec toto, les changements seront valables aussi pour t.
Initialiser un tableau
Ce qui va vraiment nous servir par la suite, c'est pouvoir lire ou modifier les éléments d'un tableau.
Pour accéder à un élément, on utilise tableau[indice], où indice est... l'indice de l'élément .
Pour ajouter un nouvel élément, on modifie simplement sa valeur, fait comme s'il existait déjà.
Exemple :
Code : JavaScript
Au final, ce tableau contiendra donc "Pierre" (indice 0), "Toto" (1), "Jacques" (2) et "Dupont" (3).
Pour un tableau associatif, on crée un tableau vide, et on associe "manuellement" (une par une) toutes les valeurs, en
utilisant une chaîne de caractères en tant qu'indice, comme ceci :
Code : JavaScript
Je ne parle pas de la lecture / modification des données, c'est exactement pareil qu'avec un tableau "numéroté".
En JavaScript, vous avez peut-être constaté qu'on a pas mal de "souplesse" (l'ordinateur ne vient pas vous embêter si
vous oubliez un point-virgule, etc.).
Eh bien avec les tableaux, on peut faire à peu près ce qu'on veut :
Un exemple :
Code : JavaScript
Plus de contrôles
Maintenant que vous savez utiliser chaque élément de votre tableau, prenons un peu de recul pour s'occuper du
tableau lui-même...
Je ne vais pas vous présenter toutes les fonctions qu'on peut appliquer à un tableau (nous y reviendrons plus tard si
besoin est), mais simplement vous expliquer comment récupérer sa longueur (chose qui sera vraiment indispensable
pour la suite), et vous présenter une fonction (déjà existante, rassurez-vous ) pour trier vos tableaux.
Comme je l'ai dit, connaître la longueur d'un tableau (grosso modo le nombre d'éléments qu'il contient) est souvent
fort utile (pour le parcourir notamment, comme nous le verrons dans la suite de ce chapitre).
Pour un tableau nommé monTableau, on accède à sa longueur grâce à monTableau.length.
L'écriture précédente est un peu nouvelle : length est en fait une variable qui "appartient" à monTableau (attention,
je n'ai pas dit que c'était un élément du tableau), variable qui contient justement la longueur du tableau .
Mais dans le cas suivant, il faut également compter les cases vides situées avant la dernière valeur.
Le tableau contient :
0. "Pierre"
1. "Paul"
2. "Jacques"
3. (rien)
4. (rien)
5. "Toto"
D'où une longueur de 6.
Trier un tableau
En restant dans une difficulté aussi élevée ( ), voici... euh... pour l'instant, appelons ça une fonction... qui permet
de trier un tableau (par ordre croissant) grâce à monTableau.sort() (to sort signifie trier en anglais).
Reprenons l'exemple précédent (avec des chaînes de caractères, le tri se fait... par ordre alphabétique) :
Code : JavaScript
Exploiter un tableau
Eh bien je crois qu'on a tout vu... sauf l'essentiel .
On sait accéder à un élément particulier, et on sait comment connaître la longueur de notre tableau...
Il ne nous reste plus qu'à accéder à tous les éléments de notre tableau, un par un !
Lire un tableau
Commençons par le plus simple : que peut-on faire en parcourant un tableau ? Tout d'abord, le lire !
On va donc créer une fonction, qui prend en argument un tableau, et qui va nous "lire" le tableau dans une chaîne de
caractères.
On doit en fait répéter une action sur chacun des éléments du tableau. On va donc utiliser... une boucle.
Il est facile de parcourir un tableau numéroté à l'aide d'une boucle for : en effet, on veut accéder à tous les
tableau[i], avec i allant de 0 à tableau.length -1 (ce qui nous fait bien nos tableau.length éléments).
Voici donc une fonction qui retourne, sous forme de chaîne de caractères, le contenu du tableau :
Code : JavaScript
function lire1(tab)
{
var chaine = "Le tableau contient :"
for(var i=0; i<tab.length; i++)
chaine += "\n" + i + " -> " + tab[i];
return chaine;
}
Dans la pratique, on utilise généralement des boucles comme celle-ci (au moins, on est sûrs de n'avoir aucun
problème de compatibilité, et c'est (souvent) aussi bien que la boucle que je vais vous présenter).
La boucle précédente est parfaite pour des tableaux numérotés, mais si vous avez fait l'essai avec un tableau
associatif, vous avez pu vous rendre compte que ça n'affiche rien .
Rassurez-vous, il existe une variante de la boucle for qui nous permet de parcourir un tel tableau .
Cette boucle va parcourir un par un tous les indices du tableau. Et une fois qu'on a les indices, on a les valeurs qui vont
avec .
De plus, si on laisse des cases vides (dans le cas d'un tableau numéroté), elle ne seront pas parcourues par cette
boucle.
function lire2(tab)
{
var chaine = "Le tableau contient :";
for(var indice in tab)
chaine += "\n" + indice + " -> " + tab[indice];
return chaine;
}
Exploiter un tableau
Maintenant que vous savez lire un tableau, vous n'aurez pas de mal à le parcourir pour y effectuer les opérations que
La structure est exactement la même : on utilise une boucle for (version 1 de préférence ) pour parcourir toute
les cases du tableau, et on y fait ce que l'on veut.
Un petit exemple ?
On va créer une fonction qui calcule la moyenne d'un tableau contenant des nombres (et aucune case vide).
La moyenne de plusieurs nombres, c'est (la somme de ces nombres) divisée par (le nombre de nombres).
Avec deux nombres x et y, c'est donc (x+y) / 2.
Code : JavaScript
function moyenne(tableau)
{
var n = tableau.length; // nombre de valeurs
var somme = 0;
for(i=0; i<n; i++)
somme += tableau[i];
return somme/n; // somme divisee par le nombre de valeurs
}
Maintenant, attaquons-nous à un peu plus dur (rassurez-vous, c'est aussi moins courant d'y avoir affaire)...
Il est possible de créer des tableaux à plusieurs dimensions .
Pour y voir plus clair : prenons l'exemple d'une grille de sudoku (une grille de 9 x 9 cases).
Ça illustre parfaitement un tableau à deux dimensions. Chaque ligne est un tableau de 9 cellules (en vert), et la grille
elle-même est un tableau de lignes (en bleu).
Pour accéder à la case (1,5) du schéma (ligne 1, colonne 5), c'est en fait très facile :
on accède au tableau qui contient la ligne 1 avec grille[1] (c'est le tableau vert, qui est dans la case n°1 du
tableau bleu)
à l'intérieur de ce tableau (le vert, dont on vient de parler), on va accéder à la case n° 5 : grille[1][5].
Pour créer un tel tableau, on commence par créer celui qui va contenir les lignes (en bleu sur le schéma).
Ensuite, pour chaque ligne (dans chaque case de ce tableau), on crée un nouveau tableau (en vert).
Pour terminer, dans chaque ligne, on parcourt toutes les cellules pour leur mettre la valeur 0.
Code : JavaScript
// on cree les lignes (tableau vert) les unes après les autres
for(var i=0; i<9; i++)
grille[i] = new Array();
On utilise donc deux boucles imbriquées pour le parcourir (dans l'exemple ci-dessous, on affiche la valeur de chaque
case):
Code : JavaScript
Mais je ne détaillerai pas plus le cas de tableaux à 3 ou 4 dimensions : si jamais un jour vous avez besoin d'en utiliser,
prévenez-nous (avec ça, je suis tranquille, la boîte à MP a encore de beaux jours devant elle ).
Q.C.M.
Vrai ou faux ?
En JS, la taille d'un tableau est fixe.
Faux, on peut ajouter autant d'éléments qu'on veut (en restant raisonnable...)
ce sont en fait des tableaux, dont les cellules contiennent des tableaux "normaux"
Si ce chapitre ne vous a pas semblé très clair, je vous invite à le relire (plutôt que de vous en prendre à ses auteurs ) :
comme je vous l'ai dit lors de l'introduction, c'est une notion importante.
De plus, certaines notions concernant les tableaux seront reprises dans la seconde partie, qui traitera de la POO...
Mais je n'en dis pas plus pour l'instant .
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 352 989
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Revenons sur un sujet abordé quelques chapitres plus tôt : les fonctions.
C'est une notion récurrente en JS, et il y a encore pas mal de choses à en dire !
Cependant, vous savez déjà des choses à leur sujet : créer des fonctions qui prennent des arguments et qui renvoient
des valeurs... bref, tout ce qu'il faut savoir pour les utiliser .
Mais ce chapitre va apporter un regard nouveau : on va découvrir qu'une fonction, ce n'est en fait... qu'une variable !
On va également apprendre à créer des fonctions auxquelles on peut donner n'importe quel nombre d'arguments, selon
notre envie, mais surtout selon notre besoin...
Rassurez-vous : rien de bien compliqué, vous avez déjà acquis toutes les notions nécessaires dans les chapitres
précédents .
Sommaire du chapitre :
Fonctions et variables
Les arguments facultatifs : nombre fixé d'arguments
Les arguments facultatifs : nombre illimité d'arguments
Q.C.M.
Fonctions et variables
Nous avons, dans les chapitres précédents, étudié séparément les variables et les fonctions.
Mais en fait, une fonction, ce n'est pas si différent que ça d'une variable...
Rappel
Histoire de vous rafraîchir un peu la mémoire, je vous rappelle qu'une fonction se déclare dans l'en-tête de la page, de
cette manière :
Code : JavaScript
Eh bien figurez-vous qu'il existe une autre manière de créer une fonction, en utilisant une variable.
Voyez plutôt :
Code : JavaScript
Cette fonction est exactement la même que celle au dessus (à l'exception du return valeur;).
Cette fois-ci :
On a déclaré notre variable, à l'aide du mot-clé var (comme nous avons vu dans le chapitre à ce sujet).
On a donné à notre variable le nom de toto.
On lui a affecté (on lui a donné pour valeur) une fonction, prenant deux paramètres nommés arg1 et arg2, et
exécutant le code entre les accolades.
Mais alors, si ce sont les mêmes fonctions, quel est l'intérêt d'utiliser cette nouvelle méthode plutôt que
l'ancienne ?
C'est en fait un autre point de vue, assez différent : en déclarant une fonction de cette manière, on voit clairement
qu'on enregistre notre fonction dans une variable.
On fait un essai : on demande deux nombres à l'utilisateur, ainsi que le nom de la fonction à appliquer (add, soustr,
mult, div ou moy).
Code : JavaScript
C'est quand même plus joli que d'effectuer cinq if à la suite, pas vrai ?
Puisqu'on parle de variable, un petit rappel concernant la portée de celles-ci ne sera pas inutile...
En JavaScript, on distingue les variables globales (accessibles n'importe où dans votre code) des variables locales.
Les variables locales déclarées dans une fonction ne seront accessibles (et "visibles") qu'à l'intérieur de cette fonction.
On peut donc sans problème utiliser le même nom pour des variables locales de deux fonctions différentes.
Comme je l'ai déjà dit, il faut éviter d'utiliser des variables globales.
Comment ça marche ?
On déclare une variable locale à l'aide de var, dans le bloc d'instructions (qui est généralement "matérialisé"
par des accolades) dans lequel elle doit être accessible.
Il y a deux façons de créer une variable globale : soit en la déclarant en dehors de tout bloc d'instructions (tout
au début du code JS), soit on l'utilise sans la déclarer, comme si elle l'avait déjà été (on parle alors de
déclaration implicite).
Un exemple :
Code : JavaScript
Lorsque la fonction n'a pas été appelée, il y a une seule variable globale : a.
Quand on appelle la fonction, celle-ci modifie cette variable globale, et on en déclare (implicitement) une
autre : b.
Une fois la fonction exécutée, on peut toujours accéder aux variables a et b, car elles sont globales.
Cependant, on ne peut accéder à la variable resultat uniquement à l'intérieur de la fonction, car c'est une
variable locale.
function f(x,y)
{
// code de la fonction
}
f(5);
deux variables locales, x et y, vont être créées (ce sont les arguments)
la variable x va être initialisée avec la valeur 5 (c'est la valeur qu'on a donnée lors de l'appel pour le premier
argument)
mais y ne sera pas initialisée, car on n'a pas précisé le second argument
var x, y;
x = 5;
// code de la fonction
On se retrouve donc face à une variable déclarée, mais... qui n'a pas de valeur !
Poursuivons donc nos essais : que va-t-il se passer avec un tel code ?
Code : JavaScript
var y;
alert(y);
En effet, undefined est un mot-clé signifiant que la variable est déclarée, mais qu'on ne lui a jamais donné de
valeur .
Si la variable n'avait pas été déclarée, on n'aurait pas eu de message du tout : le script aurait été interrompu
(l'ordinateur ne peut pas deviner qu'il s'agit d'une variable, puisqu'on ne l'a pas déclarée).
Comment ça se soigne ?
On peut effectuer un test comme celui-ci pour vérifier si la variable y est définie :
Code : JavaScript
if(y == undefined)
Et on peut aussi créer une fonction qui renvoie true ("vrai", cf. le chapitre sur les conditions) si la variable est définie,
false sinon.
Code : JavaScript
function isDefined(variable)
{
return (variable != undefined);
}
function isDefined(variable)
{
if(variable == undefined)
return false;
else
return true;
}
Mais c'est "bête" d'écrire un tel code : "si condition est vrai, alors renvoie vrai, sinon renvoie faux"...
Notez que la valeur booléenne d'une variable non initialisée est false.
Ainsi, en effectuant le test if(y), si la variable y n'est pas initialisée, c'est comme si elle était initialisée avec false.
Exemple
Tout ça pour dire qu'on peut créer des fonctions pour lesquelles certains arguments sont facultatifs.
Un exemple : une fonction dist(a,b) qui calcule la distance entre a et b (autrement dit, la valeur absolue de b-a).
Mais si on appelle dist(a), on veut que la fonction calcule la valeur absolue de a (la distance entre a et 0).
Comment faire ?
Pour le calcul de la distance, pas de problème, on teste si a est plus grand que b, et on calcule a-b ou b-a selon le
cas.
En revanche, la nouveauté se trouve dans le second point : si on ne donne qu'un seul paramètre, il va falloir initialiser
b à 0.
Code : JavaScript
function dist(a,b)
{
// on initialise b a 0 si besoin
if(b == undefined)
b = 0;
// on continue ensuite normalement
if(a > b)
return a-b;
else
return b-a;
}
Au début de la fonction, il faut donc vérifier si les arguments facultatifs ont été précisés : si ce n'est pas le cas, il va
falloir leur donner une valeur par défaut.
C'est bien gentil tout ça, mais ça ne permet pas de réaliser la fonction d'addition dont on a parlé quelques
chapitres plus tôt, qui additionnait tous les arguments qu'elle avait !
En effet, on avait parlé d'une fonction qui devait pouvoir s'utiliser comme ceci :
Code : JavaScript
Ce qui serait pratique, c'est que les arguments soient numérotés... un peu comme... un tableau !
Justement, il est possible de récupérer un tableau qui contient tous les arguments de la fonction. Du coup, le
problème semble tout de suite plus simple .
Partons de la fonction d'addition qu'on veut réaliser. On peut déjà commencer par la créer comme ceci :
Code : JavaScript
function addition()
{
// corps de la fonction
};
Ce tableau contient tous les arguments qu'on a donnés à la fonction lors de son appel.
Ainsi, en appelant addition(21, 4, 15, 11, 6), on aurait (schématiquement) :
Code : JavaScript
Petite parenthèse : le point rouge . ne vous rappelle-t-il pas monTableau.length, qui est la longueur de
monTableau ?
Eh bien on a gagné !
Non ? Je vous sens sceptiques...
Commençons par créer une variable contenant ce tableau, qu'on va appeler nb (les arguments sont les nombres à
additionner) :
Code : JavaScript
var nb = addition.arguments;
Et maintenant, il ne reste plus qu'à tout additionner (qui dit tableau, dit boucle...), ce qui nous donne cette fonction :
Code : JavaScript
function addition()
{
var nb = addition.arguments;
var somme = 0;
for(var i=0; i<nb.length; i++)
somme += nb[i];
return somme;
};
Il ne nous reste plus qu'à tester (le moment le plus stressant en programmation ):
Code : JavaScript
alert( addition(12, 5) );
alert( addition(21, 4, 15, 11, 6) );
Notez qu'on peut très bien appeler addition(), sans aucun paramètre : le résultat est 0.
Un autre exemple
Pour que ce soit bien clair pour vous, étudions un nouvel exemple : une fonction, prenant encore une fois autant de
paramètres (des nombres) qu'on veut, et qui renvoie le plus grand de ces nombres.
Cette fois-ci, à la différence de l'addition, on ne sait pas trop quoi renvoyer s'il n'y a aucun paramètre...
On va donc créer une fonction comme ceci :
Code : JavaScript
function maxi(m) { };
Dans le tableau d'arguments, la valeur de m sera également prise en compte, dans la première case (la case
numéro 0).
On va ensuite parcourir le tableau, et enregistrer la plus grande valeur "lue" dans une variable (on peut utiliser la
variable m) : cette variable contiendra donc le plus grand nombre parmi ceux qu'on a déjà parcourus.
Code : JavaScript
function maxi(m)
{
var nb = maxi.arguments; // on a donc m = nb[0]
for(var i=1; i<nb.length; i++)
if(nb[i] > m) // si l'argument est plus grand que le maximum...
m = nb[i]; // ... alors c'est le maximum
return m;
}
Q.C.M.
Laquelle de ces déclarations de fonction est incorrecte ?
function f(x,y) { };
var f = function(x,y){};
On veut créer une fonction f qui puisse s'utiliser de deux manières (x et y sont ici des variables) :
Code : JavaScript
Il va falloir :
créer deux fonctions f différentes : l'une avec un seul argument, l'autre avec deux
choisir : soit on fait f(x), soit f(x,y), mais on ne peut pas créer une fonction qui fait les deux
vérifier si y a été défini, et si ce n'est pas le cas, lui donner sa valeur par défaut
En effet, le JavaScript, c'est avant tout de la Programmation Orientée Objet. Mais pour l'instant, nous n'avons pas vu
l'ombre d'un objet. Enfin si, quelques allusions par-ci par-là, mais presque rien.
Par contre, dès les prochains chapitres, on va apprendre à interagir avec le visiteur en utilisant la page web, et vous
verrez qu'on en a, des possibilités !
La POO, kézako ?
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 354 480
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
C'est un concept qu'on se représente très bien dès qu'on l'utilise, mais qui est difficile à expliquer clairement avec des
mots. Pour cette raison, nous allons partir d'un exemple...
Sommaire du chapitre :
Prenons l'exemple d'un vendeur d'ordinateurs qui souhaiterait obtenir (en JS , même si ce n'est pas le langage le plus adapté) la
liste des ordinateurs qu'il vend, ainsi que leurs caractéristiques. Le problème se pose de savoir comment enregistrer
toutes ces données...
C'est là qu'interviennent les objets : ils vont en fait nous permettre de regrouper dans une même "structure" toutes les
données communes à un même ordinateur.
Encore mieux : on va même pouvoir définir et appliquer des fonctions directement à cette structure, pour en récupérer
certaines données (les caractéristiques de l'ordinateur notamment), pour les modifier, pour les comparer, etc.
des variables, appelées attributs, qui caractériseront l'objet : ce sont les bases de notre "structure". Un
attribut peut très bien être un objet : on dira alors que c'est un sous-objet de notre classe.
des fonctions, appelées méthodes, qui permettront (entre autre) d'agir sur cet objet.
En JS, certains objets possèdent également des évènements, que l'utilisateur pourra utiliser pour déclencher
un script.
C'est un peu particulier, c'est pourquoi nous en parlons séparément.
Dans notre cas, on va définir notre classe "ordinateur" par les attributs :
description() qui retourne (sous forme de phrase) les caractéristiques de l'ordinateur. Du style : "Cet ordinateur
est équipé d'un processeur cadencé à xx GHz, d'un disque dur d'une capacité de ... blabla..."
caracteristiques() : renvoie une liste en HTML des composants avec leur(s) caractéristique(s)
plusDeRamQue(x) : renvoie true si l'ordi possède plus de x Mo de Ram, sinon false
etc. selon les besoins / votre imagination .
Bref : on a notre classe d'objet. C'est en quelque sorte un modèle, grâce auquel on va construire tous nos objets
"ordinateur" : ces derniers sont appelés des instances (comprenez : des "exemplaires", des "répliques") de cette classe
d'objets. Les instances s'enregistrent dans des variables.
Par exemple, on pourra créer l'instance "ordiDeJean", dont les attributs auront des valeurs qui correspondent à
l'ordinateur de Jean.
Lorsqu'on parle d'objet, on désigne soit une classe d'objet, soit une instance : il faut bien en être conscient.
Dans un premier temps, nous vous le préciserons, pour que vous ne mélangiez pas tout. Mais ensuite, ce sera à vous de
distinguer les deux sens du mot "objet", selon son contexte...
Voici quelques autres objets que l'on peut créer, qui auront des utilisations différentes...
On peut imaginer, comme l'a fait M@teo21 dans son cours sur le C/C++, un objet "personnage" représentant un
personnage dans un jeu de rôle. Parmi les attributs, on trouvera la vie, la mana, la force, etc. et parmi les méthodes,
on aura attaquer, boire une potion, changer d'arme, etc.
Pour changer de domaine, on peut imaginer des objets mathématiques, tels que les fractions : on pourra les
additionner, les soustraire, les multiplier, les diviser entres elles, simplifier une fraction, etc. L'intérêt, c'est de
manipuler des nombres (y compris les résultats) sous forme de fraction.
Bref, suivant nos besoins, on va pouvoir créer toutes sortes d'objets. Vous verrez, c'est pratique .
L'un des (nombreux ?) avantages de la POO, c'est qu'elle sépare le travail en deux : d'un côté, le concepteur de la
classe d'objet, et de l'autre, l'utilisateur.
Le concepteur va définir entièrement la classe d'objet en question (il va définir un certain nombre d'attributs et
programmer des méthodes associées à cette classe).
Une fois la classe créée, il pourra l'améliorer (en rajoutant des méthodes ou en optimisant le code existant).
L'utilisateur va pouvoir utiliser cette classe d'objet dans ses programmes, en créant des instances de l'objet, et
en utilisant les méthodes fournies par le concepteur.
Il n'a pas à se soucier de tout le code de la classe (c'est justement le boulot du concepteur) : c'est ça qui est
génial .
Dans un premier temps, nous allons adopter le second point de vue, pour découvrir les nombreux objets qui existent
déjà en JS (ce qui n'est pas une mince affaire, croyez-moi ).
Puis ensuite seulement nous allons nous attaquer à la création de nos propres objets, ce qui est un réel jeu de
construction...
Avant d'attaquer la pratique, je vous conseille de lire la première partie du chapitre d'introduction à la POO
(partie intitulée "Des objets... pour quoi faire ?") du cours de C/C++ de M@teo21.
Comment ça s'utilise ?
Assez parlé, voyons plutôt comment s'utilisent des objets. Ca vous aidera à comprendre ce que c'est, et à quoi ça sert.
Mais en fait, vous connaissez déjà une classe d'objet : les tableaux, dont le nom est Array !
Son utilisation diffère un peu des objets "classiques", mais on y retrouve néanmoins les éléments typiques des objets.
Dans cet exemple, nous avons donc créé une instance "monTableau" de la classe Array.
Dans les parenthèses, on spécifie des paramètres propres à cette instance de l'objet. Par exemple, pour l'objet
"ordinateur", ça peut donner quelque chose comme ceci :
Code : JavaScript
var ordiDeJean = new Ordinateur("2 GHz", "120 Go", "512 Mo", "FX 2100");
L'objet (la classe) "ordinateur" n'a pas encore été défini, on ne sait donc pas trop s'il faut indiquer les
caractéristiques sous forme de chaînes de caractères, de nombres, ...
Ce sera à nous de le choisir au moment de la création de cet objet, et il nous faudra l'indiquer au vendeur, pour qu'il
l'utilise correctement.
Les attributs
Pour accéder à un attribut (une variable) d'un objet (d'une instance), on utilise le nom de l'objet, suivi d'un point, puis
du nom de l'attribut, comme ceci :
objet.attribut
monTableau.length
Que faire avec les attributs ? Et bien ce sont des variables qui "appartiennent" à l'objet, on peut donc les lire et/ou les
modifier (bien que dans certains cas, comme ici, ça ne serve pas à grand chose de les modifier).
Ainsi, si Jean rajoute de la RAM à son ordinateur, on va pouvoir modifier l'attribut correspondant :
Code : JavaScript
ordiDeJean["ram"];
Eh oui, les éléments d'un tableau associatif ne sont en fait que des attributs qu'on rajoute à notre tableau...
Les méthodes
Pour exécuter une méthode d'un objet (d'une instance), on utilise la même syntaxe que pour accéder à un attribut,
sans oublier les parenthèses (puisqu'une méthode est une fonction).
Un exemple avec la méthode sort() de l'objet Array :
Code : JavaScript
monTableau.sort();
Avec notre classe "ordinateur", on va pouvoir créer une méthode qui retournera une description sous forme de
caractère. On l'utilisera ainsi :
Code : JavaScript
Petit rappel : comment ça se passe dans l'ordinateur lorsqu'on crée un tableau, avec var toto = new
Array() ?
Citation : chapitre sur les tableaux
L'ordinateur crée un tableau en mémoire (on lui en a donné l'ordre avec new).
Il va également créer une variable dans sa mémoire (on lui a demandé avec var).
Mais schématiquement, voilà ce qui va se passer : en fait, on ne va pas "mettre" le tableau dans la
variable (ça ne rentrerait pas, une variable c'est trop petit). On va dire à la variable où se situe notre
tableau dans la mémoire de l'ordinateur (c'est beaucoup plus facile comme ça).
Bref, revenons à nos objets. Dans cet exemple, notre tableau se retrouve "perdu" dans la mémoire de l'ordinateur :
Code : JavaScript
Tout ça pour vous dire que JS possède un système nommé ramasse-miettes, ou encore garbage collector pour les
anglophones, qui se charge de détruire automatiquement tout ce qui se retrouve ainsi "perdu".
Ainsi, lorsqu'il n'y aura plus aucun "lien" vers un objet, ce dernier sera détruit.
Si on veut détruire un tableau, il nous suffit donc de modifier la valeur de la variable qui contient l'adresse du tableau.
C'est ce qu'on a fait dans l'exemple ci-dessus : le tableau se retrouve "perdu" en mémoire, et le ramasse-miettes le
détruira .
On récapitule le vocabulaire...
Avant de terminer ce chapitre, récapitulons le vocabulaire utilisé à propos de la POO, pour qu'il soit clair pour vous.
Classe : c'est un modèle, une définition d'une "structure", qui va posséder des attributs et des méthodes.
Exemple : une voiture, qui possède une couleur, une marque, un nom, etc.
Instance : c'est un exemplaire d'une classe.
Exemple : la voiture de mon oncle, qui a la couleur "rouge", de marque "Pijo" et de nom "Pijo 404".
Objet : selon le sens, il s'agit d'une classe ou d'une instance.
Attribut : c'est une variable qui "appartient" à un objet.
Exemple : l'attribut "couleur" pour la voiture.
Méthode : c'est une fonction propre à une classe. Elle va pouvoir agir sur l'instance à laquelle on l'applique.
Exemple : repeindre la voiture.
Q.C.M.
Parmi ces affirmations, l'une est fausse.
Laquelle ?
La POO permet de regrouper des variables et fonctions dans ces fameux objets.
POO signifie Programmation Orientée Objet. C'est une façon de programmer qui se base sur des objets.
De manière simple, on pourrait résumer comme ceci le fonctionnement d'un objet : on crée des exemplaires à partir
d'un modèle.
Avec les mots exacts, il faut dire :
Un objet peut posséder des [...], des [...], des [...] et des [...], mais pas :
d'évènement
d'attribut
de méthode
de partie
de sous-objet
element.objet
objet.element
element(objet)
objet(element)
objet->element
C'en est terminé pour cette approche, plutôt théorique des objets.
Nous allons maintenant découvrir les objets qui proviennent de la page HTML : de quoi s'occuper pendant quelques
chapitres .
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 365 186
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Maintenant que la notion d'objet vous est un peu plus familière, revenons au JS dans notre page HTML.
Pour JS, tous les éléments HTML sont des objets (images, liens, etc.) : on va donc pouvoir s'en servir pour en connaître
ou en modifier les caractéristiques (comme l'adresse de l'image ou ses dimensions).
Cela se révèlera particulièrement pratique, notamment dans le cas des formulaires, qui nous serviront à communiquer
avec notre cher utilisateur .
Au fil de ce chapitre, nous allons voir comment accéder à ces objets issus de notre page, et comment les exploiter.
Sommaire du chapitre :
Au sommet de la hiérarchie...
Les objets du document
Un traitement de faveur pour les formulaires
Complément : le mot-clé "this"
Q.C.M.
Au sommet de la hiérarchie...
L'objet window
Vous allez rapidement voir qu'en JS, la plupart des fonctions qu'on utilise sont en fait... des méthodes de certains
objets !
Prenons nos trois fonctions qui font apparaître des boîtes de dialogues, alert(), prompt() et confirm().
Ah non, ce ne sont pas des méthodes, car on ne retrouve pas la syntaxe objet.methode() !
L'objet window "représente" la fenêtre de votre navigateur. Ça va être un objet très utilisé, car il possède de
nombreux sous-objets.
Vous verrez qu'on l'utilisera souvent, car c'est un objet de base, pour ne pas dire l'objet de base : c'est pour cela qu'il
est facultatif de préciser son nom, comme vous l'avez toujours fait en écrivant alert() (sachez que le programmeur
est un animal très fainéant ).
Mais si ça peut vous rassurer, c'est le seul objet qu'on peut ne pas écrire quand on l'utilise.
L'objet document
L'objet document est un sous-objet de window. Cet objet représente la page HTML affichée dans le navigateur. C'est
un objet assez important, qu'il est impératif d'écrire ! On ne peut pas l'omettre comme window.
Nous allons passer par ses méthodes pour accéder aux éléments de notre page.
Il est possible d'atteindre (comprenez accéder à) tous les éléments de la page HTML avec deux méthodes de l'objet
document :
document.getElementById("id");
document.getElementsByTagName("balise");
getElementById("id")
Cette méthode permet d'accéder très facilement à l'élément dont l'id est id.
Je vous rappelle que deux éléments différents doivent avoir des ids différents. Cette fonction nous donne donc bien un
élément (ouf ).
getElementsByTagName("balise")
Cette méthode retourne sous forme de tableau tous les éléments HTML dont on donne la balise en argument.
Code : JavaScript
document.getElementsByTagName('textarea');
Cet exemple va retourner un tableau contenant tous les éléments <textarea> de la page.
Puisque la méthode retourne un tableau, il est bien sûr possible d'accéder à chacun des éléments. Si on veut accéder
au second <textarea> de la page, on procédera donc ainsi (rappelez-vous, on commence à compter à partir de 0) :
Code : JavaScript
document.getElementsByTagName('textarea')[1];
Mais, à quoi peut bien servir cette méthode ? On ne doit pas utiliser ça tous les jours !
Effectivement ! Cela dit, le tableau retourné peut astucieusement être utilisé avec une boucle, de manière à récupérer
des éléments particuliers repérés par exemple par leur attribut class ; on pourra ainsi appliquer des changements
(comme les masquer) uniquement à ces éléments là.
Compatibilité
Bref, il faut juste savoir que ces méthodes ne sont pas présentes depuis les débuts de JS, mais qu'elles sont arrivées
après, et qu'il existe un moyen de savoir si la méthode "getElementById" fonctionne sur le navigateur qui exécute le
script.
On effectue pour cela ce test :
Code : JavaScript
Les attributs
Nous n'allons pas étudier tous les attributs de tous les objets, sachez simplement qu'on retrouve presque toujours les
mêmes attributs qu'en HTML.
On peut citer les attributs id (encore lui ) et className (qui correspond à l'attribut HTML "class").
Ce dernier est l'un des rares attributs dont le nom n'est pas le même qu'en HTML.
La cause : le mot-clé "class" est réservé en JS (on n'a pas le droit de l'utiliser pour des noms de variables ou autres).
Donc il a fallu trouver un autre nom, d'où className.
monImage = document.getElementsByTagName("img")[0];
monImage.src = "banniere.jpg";
monImage.width = "800";
monImage.height = "200";
alert( document.getElementById("idLien").href );
Sachez qu'il existe une autre façon de modifier un attribut d'un objet HTML, en utilisant un truc nommé DOM,
mais on en reparlera en temps voulu .
Les évènements
Rappel : les évènements doivent se noter en minuscule, même si on les écrit onEvent pour plus de lisibilité.
onClick et onDblClick : lors d'un clic / double clic sur l'élément en question
onKeyPress : lorsqu'on appuie sur une touche avec cet élément sélectionné
onKeyDown et onKeyUp : lorsqu'une touche est enfoncée / relâchée avec cet élément sélectionné
onMouseOver et onMouseOut : lorsque le pointeur de la souris arrive sur l'élément / sort de cet élément
onMouseMove : lors d'un déplacement de la souris au-dessus de cet élément
onMouseDown et onMouseUp : lorsque le bouton de la souris est enfoncé / relâché sur cet élément
Leur utilisation
La première façon de déclencher un script lors d'un évènement, c'est d'utiliser l'attribut HTML, comme nous l'avons vu
Code : HTML
Code : HTML
Code : JavaScript
document.getElementById("uneImage").onclick = function()
{
alert("Oui ?");
}
function quoi()
{
alert("Oui ?");
};
document.getElementById("uneImage").onclick = quoi; // on parle de la
fonction elle-meme : pas de parentheses
En partant d'un formulaire (balise form), il est possible d'accéder à chacun des champs en utilisant leur attribut name.
Admettons que nous voulons agir sur le champ de texte qui s'appelle pseudo.
On va commencer par accéder au formulaire comme nous l'avons vu, par son id :
Code : JavaScript
Voyons maintenant comment accéder au champ nommé "pseudo" à partir de notre formulaire, sans utiliser son id.
Dans le cas des éléments de formulaires, on accède donc aux sous-objets directement par leur nom (l'attribut name).
On va également pouvoir accéder aux éléments du formulaire en sachant que notre formulaire contient un tableau
elements regroupant justement tous ses éléments.
Je vous déconseille cette façon d'accéder aux éléments : si vous insérez un champ, les indices (les numéros)
changent, et il faut modifier le script en conséquence .
Cette façon d'accéder aux éléments est semblable à la précédente, sauf qu'on utilise pour les indices non pas les
numéros, mais les noms.
Code : JavaScript
monForm.elements["pseudo"];
Certes, c'est un peu plus long que la première façon de faire, mais on comprend lors de la lecture que pseudo est un
élément de formulaire.
Il y a beaucoup à dire concernant l'utilisation des formulaires : en effet, comme nous l'avons dit, c'est un excellent
moyen de communiquer avec le visiteur (plus agréable que les boîtes de dialogue).
On récapitule...
Pour accéder à un élément, on va donc généralement utiliser la méthode getElemementById de l'objet document.
Code : JavaScript
Si on veut récupérer un tableau contenant toutes les balises ayant un nom donné (toutes les images, par exemple), on
va utiliser la méthode getElementsByTagName.
Code : JavaScript
Pour les éléments de formulaires : on peut utiliser le tableau elements du formulaire lui-même, ou bien directement
le nom de l'élément.
Par exemple, pour accéder au champ nommé "pseudo" de notre formulaire d'id "idForm" :
Code : JavaScript
ou bien :
Code : JavaScript
Ici, l'utilisation de this nous évite d'avoir à repérer l'image par son id.
function afficherDestination(lien)
{
alert("Ce lien mene ici : " + lien.href);
}
Code : HTML
Quand on cliquera sur le lien, une boîte de dialogue nous en affichera la destination.
Q.C.M.
Pour accéder aux objets HTML de notre page (sans utiliser this), on passe par :
L'objet "document", qui est un objet indépendant (pas sous-objet d'un autre objet).
Vrai ou faux ?
var f = document.getElementById("toto");
f.nomDuChamp;
Vrai
Faux
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 934 141
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Dans le chapitre précédent, nous avons vu comment accéder aux différents éléments qui composent un formulaire.
Nous allons maintenant apprendre à utiliser ces éléments afin d'éviter à l'utilisateur une overdose de boîtes de
dialogue .
Pour des raisons de clarté, le code HTML des formulaires est le plus concis possible, comme cette intro .
Ainsi, des balises recommandées (notamment label) n'apparaissent pas.
Sommaire du chapitre :
L'objet "form"
Les éléments, de A à Z !
Les éléments et leur fonctionnement
Q.C.M.
L'objet "form"
Commençons par l'objet form, qui représente le formulaire lui-même : tous les éléments du formulaire en sont des
sous-objets.
Nous n'allons pas parler très longuement de lui, mais simplement présenter deux évènements qui lui sont associés :
onReset et onSubmit.
onSubmit
Cet évènement se produit lorsque le formulaire est envoyé. Il est particulièrement intéressant, car il va nous
permettre de vérifier si les champs sont bien remplis avant d'envoyer le formulaire ; si ce n'est pas le cas, on pourra
annuler l'envoi.
Pour rappel, l'envoi d'un formulaire en HTML se fait par un clic sur un élément input de type submit :
Code : HTML
Comme je vous l'ai dit, il est possible de bloquer l'envoi d'un formulaire, et ce, de cette manière :
Code : HTML
On va donc créer une fonction, nommée verifier dans l'exemple qui suit, qui va vérifier le contenu du formulaire, pour
éventuellement en bloquer l'envoi.
Code : HTML
Code : JavaScript
function verifier(f) {
if( /* le formulaire est bien rempli */ )
return true;
else
{
alert('Le formulaire est mal rempli');
return false;
}
}
Vérifier le contenu d'un formulaire avec Javascript n'est pas vraiment fiable (JS peut être désactivé,
volontairement ou non).
Seule une vérification des données côté serveur (avec PHP par exemple) est réellement efficace !
A ne pas faire !
Il est possible d'envoyer le formulaire directement en JS. Pour ce faire, il suffit d'exécuter la méthode submit() du
formulaire à envoyer.
Cependant, il faut toujours utiliser un bouton de type submit, sinon l'envoi du formulaire devient impossible pour
quelqu'un ne disposant pas de JavaScript, ou l'ayant désactivé.
onReset
Le second évènement typique des formulaires se nomme onReset, et est appelé lorsque le formulaire est remis à zéro
par un bouton de type reset.
Dans ce cas, si l'utilisateur veut réinitialiser le formulaire, il devra le confirmer. Si il confirme son action, true est
renvoyé, et le formulaire est alors réinitialisé ; s'il annule, c'est false qui est retourné, et rien ne se passe.
Notez qu'on peut bien sûr exploiter à la fois onSubmit et onReset pour un même formulaire.
Les éléments, de A à Z !
Cette partie a pour but de lister les attributs, méthodes et évènements typiques des différents éléments de
formulaire. Vous trouverez plus d'explications et d'exemples dans la sous-partie qui suit.
Pour plus de clarté, certains éléments ont été regroupés dans une même catégorie (signalée par une astérisque). Voici
les différents éléments et les catégories :
Bouton* : regroupe les balises <button> ainsi que les <input /> de types button, reset et submit
Case* : regroupe les <input /> de types checkbox et radio
Select : balise <select>
Textarea : balise <textarea>
Texte* : regroupe les <input /> de types text, password et file (nous ne nous attarderons pas sur ce dernier)
Attributs
On retrouve, comme avec les objets qui nous viennent du document, de nombreux attributs qui sont présents
en HTML.
checked et defaultchecked : valeur booléenne, true si la case est cochée (cochée par défaut dans le cas de
defaultchecked), false sinon
disabled : si cet attribut vaut true, l'objet est grisé (impossible à modifier / cliquer)
maxlength : nombre de caractères maximal que peut contenir ce champ
readonly : si cet attribut vaut true, l'utilisateur ne peut pas modifier le contenu du champ
size : nombre de caractères / d'options qui sont affichés simultanément
value et defaultvalue : valeur (valeur par défaut dans le cas de defaultvalue) de l'élément
L'objet option
Abordons séparément les attributs de l'objet option (ce sont les choix des menus déroulants select).
Méthodes
focus : donne le focus à cet élément (pour une zone de texte, place le curseur à l'intérieur)
blur : enlève le focus de cet élément (en quelque sorte le contraire de focus)
click : simule un clic de souris sur cet élément
select : sélectionne ("surligne") le texte de ce champ
Les évènements
onFocus : lorsque l'élément reçoit le focus (pour une zone de texte, quand on place le curseur à l'intérieur)
onBlur : lorsque l'élément perd le focus (en quelque sorte le contraire de onFocus)
onChange : lorsque la valeur / l'état de l'élément change (quand on coche la case, qu'on modifie le texte, etc.)
onSelect : lorsqu'on sélectionne (quand on "surligne") le texte de ce champ
On accède au contenu des champs textes (input de type text ou password, ainsi que textarea) à l'aide de
l'attribut value, qu'on peut lire, mais aussi modifier.
Si on veut modifier le contenu d'un textarea dont l'attribut name vaut infos :
Code : JavaScript
On peut ainsi récupérer et afficher des informations dans des champs de texte, ce qui est plus agréable et moins
agressif qu'avec des boîtes de dialogues .
Les trois balises HTML citées ci-dessus possèdent l'attribut booléen readonly, qui la rend non modifiable par
l'utilisateur : on peut ainsi les utiliser pour afficher des messages.
L'objet "select"
L'objet select représente une liste déroulante, et comme dans toute liste, il peut être intéressant de savoir quel choix
est sélectionné ; voyons comment procéder.
Prenons une liste dont le code HTML (qui se trouve à l'intérieur d'un formulaire) est le suivant :
Code : HTML
Vous êtes :
<select name="genre" onchange="voirSelection(this)">
<option value="rien">Choisissez...</option>
<option value="garcon">Un garçon</option>
<option value="fille">Une fille</option>
<option value="saispas">Je ne sais pas</option>
</select>
On va ici utiliser l'évènement onChange, qui appellera la fonction quand l'utilisateur modifiera le choix.
Dans un premier temps, on va récupérer le numéro de l'option sélectionnée, grâce à l'attribut selectedIndex.
Ensuite, il ne nous reste plus qu'à lire la valeur value de l'option correspondante, qui se trouve dans le tableau
options
Code : JavaScript
function voirSelection(liste)
{
var numero = liste.selectedIndex;
var valeur = liste.options[numero].value;
alert("Vous avez choisi : " + valeur);
}
Il ne vous reste plus qu'à analyser le contenu de la variable valeur pour agir en conséquence, un peu comme ceci :
Code : JavaScript
function voirSelection(liste)
{
var valeur = liste.options[liste.selectedIndex].value;
if(valeur != 'rien')
{
if(valeur == 'saispas')
alert('Noob...');
else
alert(valeur);
}
}
La première utilisation des cases à cocher est d'en utiliser une seule (par exemple pour activer / désactiver un aperçu
automatique).
Dans ce cas, on peut savoir si la case est cochée grâce à son attribut checked, qui est une valeur booléenne (il vaut
soit true, soit false). On peut également la (dé)cocher, soit en modifiant la valeur de cet attribut, soit en appelant
la méthode click() (qui simulera un clic de souris sur la case).
Par exemple, si on a une checkbox dont le nom est "maCase", dans un formulaire dont l'id est "idForm" :
Code : JavaScript
if(document.getElementById("idForm").maCase.checked)
alert("La case est cochee");
else
{
document.getElementById("idForm").maCase.checked = true;
alert("La case n'etait pas cochee, mais maintenant elle l'est");
}
Il est également possible d'utiliser les cases à cocher par groupe : dans ce cas, toutes les cases du groupe auront le
même nom. C'est également toujours le cas avec les boutons radio.
La technique pour y accéder est alors légèrement différente. Prenons le code suivant (on suppose que ces balises se
trouvent dans un formulaire dont l'id est encore "idForm") :
Code : HTML
Toutes ces cases possèdent le même nom ; document.getElementById("idForm").mesCases n'est donc pas un
objet, mais un tableau d'objets. On va donc pouvoir accéder à la case numéro i avec
document.getElementById("idForm").mesCases[i].
Code : JavaScript
function afficherMessage()
{
var monForm = document.getElementById("idForm");
var pizza =monForm.mesCases[0].checked;
var tartiflette = monForm.mesCases[1].checked;
var ratatouille = monForm.mesCases[2].checked;
if(tartiflette)
alert("Vous venez de la montagne, non ?");
if(ratatouille && !pizza)
alert("Vous preferez la ratatouille a la pizza ?!");
}
Avec ce script, on récupère l'état de chaque case (cochée ou non), et on affiche ensuite des messages selon les cases
cochées.
Bien entendu, on n'est pas obligé d'utiliser des variables pour enregistrer l'état de chaque case, on aurait pu
écrire directement les document.monForm.mesCases[i] dans les if().
Si tout est décomposé, c'est pour que vous visualisiez mieux la chose .
alert(document.getElementById("idForm").mesCases[0].value);
On peut également utiliser une boucle pour parcourir notre tableau de cases et savoir lesquelles sont cochées.
Et c'est d'ailleurs très intéressant dans le cas des boutons radio, car il ne peut y en avoir qu'un seul de coché parmi
ceux ayant le même attribut name .
Reprenons notre exemple précédent avec des boutons radios : "Vous préférez : [...]".
Code : JavaScript
function radio()
{
var cases = document.getElementById("idForm").mesCases;
var platFavori;
On pourrait stopper la boucle précédente dès qu'on a trouvé un bouton sélectionné, étant donné qu'il ne peut
pas y en avoir plusieurs.
Il suffirait pour cela de modifier la condition de boucle :
Code : JavaScript
L'intérêt de se baser sur l'attribut value, c'est qu'on peut rajouter des choix à notre formulaire sans avoir à toucher au
code JS : plutôt intéressant.
Pour vous entraîner, essayez de reprendre le script avec une boucle dans le cas des cases à cocher, et d'afficher la liste
des plats que la personne aime.
Q.C.M.
On peut contrôler l'envoi d'un formulaire avec une fonction qui ressemble à ceci :
Code : JavaScript
function verifier(formulaire)
{
var ok;
// ici, on verifie le formulaire
// ok vaut true s'il est bien rempli, false sinon
return ok;
};
Et notre formulaire :
Code : HTML
verifier()
verifier(this)
return verifier(this)
On ne peut pas.
On accède par leurs noms à tous les éléments, un par un, et on vérifie si l'élément en question est coché.
On parcourt le tableau des éléments, et on vérifie pour chaque élément s'il est coché.
Il est maintenant temps pour vous de suivre la petite visite guidée des objets que JS nous met à disposition...
Ensuite, on va pouvoir effectuer quelques TDs pour appliquer tout ça : vérifications de formulaires et autres joyeusetés
sont au programme.
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 461 474
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Vérifier qu'un formulaire est bien rempli est un grand classique en JS.
Vous n'allez donc pas y échapper
Rassurez-vous cependant, il n'y a rien de bien compliqué derrière cela : une fois ce TD terminé, les vérifications de
formulaires n'auront plus aucun secret pour vous.
Une vérification en JS n'est pas fiable, pour la simple et bonne raison qu'il est très facile de désactiver le JS !
Ceci dit, elle a l'avantage d'être très agréable pour le visiteur, car s'il est mal rempli, le formulaire n'est pas envoyé.
Ce qui signifie :
qu'on reste sur la page du formulaire : ça évite des redirections, et donc les temps de chargements qui vont
avec (qui peuvent être longs si le serveur est saturé) ;
que si vous avez oublié de remplir un champ, pas de risque d'être redirigé sur un formulaire vide (chose très
agaçante, surtout si vous avez passé beaucoup de temps à le remplir );
que l'utilisateur peut être prévenu qu'un champ est mal rempli dès qu'il a fini de le remplir.
Autant de bonnes raisons de mettre en place une pré-vérification en JS (et donc de faire ce TD ).
Sommaire du chapitre :
Briefing
Le pseudo
L'adresse e-mail
L'âge
Tout vérifier avant l'envoi
Briefing
Le formulaire à inspecter
Code : HTML
<form action="page.php">
<p>
Pseudo : <input type="text" name="pseudo" /><br />
E-mail : <input type="text" name="email" size="30" /><br />
Âge : <input type="text" name="age" size="2" /> ans<br />
<input type="submit" value="Valider" />
</p>
</form>
Il est très simple, et si vous savez vérifier un pseudo, une adresse e-mail et un âge, alors le reste ne devrait pas vous
poser de souci.
S'il est mal rempli, en plus de bloquer l'envoi, on va colorer les champs qui posent problème (c'est quand même mieux
de dire à l'utilisateur pourquoi le formulaire n'est pas envoyé ).
Pour ce faire, on va modifier la couleur d'arrière-plan. La fonction que nous allons utiliser pour cela est toute bête
(pour peu que vous ayez lu le chapitre sur le CSS en JS) :
Code : JavaScript
Si le second paramètre vaut true, cette fonction colore le champ en rouge pâle. Sinon, elle enlève le coloriage.
Pour effacer le coloriage, il suffit de ne pas indiquer de couleur (en laissant les guillemets vides).
Cela redonnera au champ sa couleur d'arrière-plan par défaut.
À vous !
Fonctions à créer
une fonction pour vérifier le pseudo (on vérifie juste la longueur : entre 2 et 25 caractères) ;
une pour l'adresse e-mail (en utilisant de préférence une regex) ;
une pour l'âge (on va dire qu'il doit être compris entre 5 et 111 ans) ;
une méga-fonction (à partir des précédentes) qui vérifie tout.
Les trois premières fonctions doivent, en plus de colorer le champ, renvoyer true si c'est bon, et false si ça ne l'est
pas.
Conseil du jour
Rappelez-vous du mot-clé this : il peut parfois s'avérer (très) pratique...
Il faut bien sûr appeler la méga-fonction lors de la validation du formulaire, pour en bloquer l'envoi si besoin est.
Mais comme vous aimez les choses bien faites, lorsque l'utilisateur changera de champ, vous allez vérifier que le
champ est correctement renseigné.
Au travail, moussaillons !
Le pseudo
Commençons la correction par la vérification du pseudo...
La fonction
On veut donc simplement vérifier que la longueur est correcte : nous disions entre 2 et 25 caractères.
En se rappelant qu'un champ texte a un attribut value qui indique sa valeur, et qu'une chaîne de caractères possède
l'attribut length pour en connaître le nombre de caractères, notre première fonction est très rapidement
opérationnelle.
Code : JavaScript
function verifPseudo(champ)
{
if(champ.value.length < 2 || champ.value.length > 25)
{
surligne(champ, true);
return false;
}
else
{
surligne(champ, false);
return true;
}
}
Quand l'appeler ?
Il faut donc l'appeler une fois que l'utilisateur a fini de saisir son pseudo.
Rappelez-vous de l'évènement onBlur, déclenché lorsque le champ en question perd le focus (le curseur clignotant) :
c'est lui qu'il faut utiliser ici.
Quant à l'argument... le mot-clé this convient parfaitement, puisque le champ à vérifier est justement celui qui vient
de perdre le focus.
L'adresse e-mail
Peu de changements par rapport à la fonction précédente, il suffit de modifier la condition.
Pour la construction d'une regex vérifiant l'adresse e-mail, je vous renvoie au chapitre sur les regex, tout y est
expliqué.
La regex que nous allons utiliser est la suivante :
/^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/
La fonction
Nous allons utiliser la méthode test(str) de l'objet RegExp pour vérifier que l'adresse e-mail satisfasse bien la regex
ci-dessus.
Code : JavaScript
function verifMail(champ)
{
var regex = /^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/;
if(!regex.test(champ.value))
{
surligne(champ, true);
return false;
}
else
{
surligne(champ, false);
return true;
}
}
L'appel de la fonction
L'âge
La fonction
Pour contrôler l'âge, il faut avant tout le convertir en entier (grâce à parseInt) pour pouvoir le comparer aux âges
limites, en n'oubliant pas de vérifier qu'il s'agisse bien d'un nombre (avec isNaN).
Code : JavaScript
function verifAge(champ)
{
var age = parseInt(champ.value);
if(isNaN(age) || age < 5 || age > 111)
{
surligne(champ, true);
return false;
}
else
{
surligne(champ, false);
return true;
}
}
Appel de la fonction
Code : HTML
La méga-fonction
Notre méga-fonction ne fait qu'appeler nos trois fonctions et renvoyer true si tout est bon.
Le seul moment où il va falloir solliciter un peu vos neurones, c'est pour passer en arguments les champs.
Code : JavaScript
function verifForm(f)
{
var pseudoOk = verifPseudo(f.pseudo);
var mailOk = verifMail(f.email);
var ageOk = verifAge(f.age);
Vous vous êtes peut-être demandé pourquoi nous avons créé des variables apparemment inutiles...
La raison, quelque peu subtile, est la suivante : si le pseudo est incorrect, verifPseudo(f.pseudo) va renvoyer
false.
La condition ("Le pseudo est correct ET l'e-mail est correcte ET l'âge est correct") sera donc forcément fausse, que les
autres champs soient bien ou mal remplis.
Le navigateur, partant de ce principe, ne va donc pas exécuter les deux fonctions (puisque elles ne changent rien à la
condition).
Du coup, les autres champs ne seront pas colorés s'ils sont mal remplis.
C'est pourquoi on utilise ces trois variables qui peuvent sembler superflues : elles forcent le navigateur à exécuter les
trois fonctions.
Petit rappel : pour autoriser ou bloquer l'envoi, il suffit de renvoyer true ou false lorsque le formulaire est
envoyé :
Code : HTML
Voici donc la modification à effectuer pour bloquer l'envoi si le formulaire est mal rempli :
Code : HTML
Le formulaire final
surligne
verifPseudo
verifEmail
verifAge
verifForm
Alors ?
Vous voyez, ce n'était pas si difficile que ça.
Il est important que vous compreniez bien le principe de ce TD, c'est une utilisation très courante du JS.
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 95 632
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Commençons notre petite visite guidée par un objet qui vous est déjà un tant soit peu familier : Array, pour les
tableaux. Il possède plusieurs méthodes que nous ne vous avons pas encore présentées, mais qui vous serviront
certainement un jour ou l'autre.
Ce chapitre va vous expliquer le rôle des différents attributs et méthodes des tableaux.
Sa structure (ainsi que celle des prochains) est la suivante :
un sommaire, récapitulant les attributs et méthodes traités dans le chapitre, avec une brève description.
des sous-parties regroupant des explications et des exemples pour chacun des attributs / méthodes, classés par
thèmes.
Pas de question ?
Alors, allons-y.
Sommaire du chapitre :
Sommaire
Les classiques
Moins classiques
Les piles et les files
Sommaire
Les classiques
length
join(separateur) : retourne le contenu sous forme de chaîne de caractères
sort() : trie le tableau.
Moins classiques
Les classiques
length
Description
Exemple
Code : JavaScript
sort()
Description
Trie le tableau par ordre croissant (par ordre alphabétique pour des chaînes de caractères).
Ne renvoie rien : c'est le tableau avec lequel on appelle cette méthode qui est modifié.
Exemple
Code : JavaScript
join(separateur)
Description
Renvoie tous les éléments du tableaux séparés par séparateur, sous forme de chaîne de caractères. Si aucun
séparateur n'est précisé, c'est la virgule qui est utilisée.
Utile lorsqu'on teste un script.
Exemple
Code : JavaScript
Moins classiques
concat(t)
Description
Renvoie un tableau contenant les éléments du tableau, à la fin desquels sont ajoutés les éléments du tableau t.
Il est possible de mettre plusieurs arguments : monTableau.concat(t1, t2, t3, t4).
Exemple
Code : JavaScript
t contient 1,3,5,2,4.
reverse()
Description
Exemple
Code : JavaScript
t.reverse();
t.reverse();
slice(debut, fin)
Description
t.slice(debut, fin) retourne le tableau composé des éléments de t entre debut (inclus) et fin (exclus).
Si les valeurs sont négatives, les éléments sont comptés à partir de la fin.
Il est possible d'appeler t.slice(debut) (sans indiquer la fin), auquel cas le tableau retourné contient tous les
éléments à partir de debut, et jusqu'à la fin du tableau.
Exemple
Code : JavaScript
var t1 = t.slice(2);
// contient 2,3,4,5,6,7,8,9
var t2 = t.slice(2,8);
// contient 2,3,4,5,6,7
var t4 = t.slice(2,-2);
// contient 2,3,4,5,6,7
pop()
Description
Exemple
Code : JavaScript
Ce code affichera 8.
À la fin, t contient 2,4,6.
push(x)
Description
Remarque
Accepte un nombre quelconque de paramètres : ils sont tous ajoutés à la fin du tableau.
Dans les dernières version de JS, c'est la nouvelle taille du tableau qui est renvoyée (il n'est cependant pas d'usage de
récupérer la taille d'un tableau lorsqu'on travaille avec cette fonction).
Exemple
Code : JavaScript
shift()
Description
Remarque
Le décalage des éléments prend du temps lorsque le tableau est long : cette fonction n'est donc pas bien adaptée
pour utiliser un tableau comme une pile ou une file.
Exemple
Code : JavaScript
Ce code affichera 2.
À la fin, t contient 4,6,8.
unshift(x)
Description
Remarque
Accepte un nombre quelconque de paramètres : ils sont tous ajoutés au début du tableau.
La nouvelle taille du tableau est renvoyée (il n'est cependant pas d'usage de récupérer la taille d'un tableau lorsqu'on
travaille avec cette fonction).
Le décalage des éléments prend du temps lorsque le tableau est long : cette fonction n'est donc pas bien adaptée
pour utiliser un tableau comme une pile ou une file.
Exemple
Code : JavaScript
Piles et files ?
En conclusion de cette sous-partie : l'utilisation des tableaux comme files est déconseillée (elle nécessite d'utiliser
shift ou unshift, qui ne sont pas des fonctions très adaptées).
Cependant, une utilisation comme pile est tout à fait possible, grâce à t.push(x) pour empiler, t.pop() pour
dépiler, et la condition t.length == 0 pour savoir si la pile est vide ou non.
L'objet "Math"
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 47 687
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
La visite guidée se poursuit avec un objet assez utile, dont le doux nom va en ravir certains, mais en effrayer d'autres.
Voici l'objet... Math.
Il regroupe entre autres des fonctions mathématiques, plus ou moins utiles. Voyons tout cela sans plus tarder.
Selon votre niveau en maths, il est possible que certaines de ces fonctions vous soient inconnues.
Mais ne vous inquiétez pas pour autant : ce sont généralement des fonctions qui sont peu utilisées en dehors d'un usage
purement mathématique.
Sommaire du chapitre :
Sommaire
Fonctions basiques
Arrondir
Trigonométrie
Autres fonctions usuelles
Inclassables
Fonctions indépendantes de l'objet "Math"
Nos propres fonctions
Sommaire
Fonctions basiques
Arrondir
Trigonométrie
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x).
exp(x)
log(x) : logarithme népérien
pow(x,y) : x puissance y
sqrt(x) : racine carrée.
Inclassables
PI : constante pi
random() : renvoie un nombre aléatoire de l'intervalle [0;1[
À la fin du chapitre : génération d'un entier aléatoire.
Fonctions basiques
abs(x)
Description
Exemple
La distance entre deux nombres (qui est simplement la valeur absolue de leur différence) :
Code : JavaScript
function distance(x,y)
{
return Math.abs(x-y);
}
alert(distance(1,5));
alert(distance(4,2));
min(x, y)
Description
Exemple
Ce code affichera 3 :
Code : JavaScript
alert(Math.min(3,5));
max(x, y)
Description
Exemple
Ce code affichera 5 :
Code : JavaScript
alert(Math.max(3,5));
Arrondir
round(x)
Description
Exemple
alert(Math.round(3.14));
alert(Math.round(-1.234));
floor(x)
Description
Exemple
alert(Math.floor(3.14));
alert(Math.floor(-1.234));
ceil(x)
Description
Exemple
alert(Math.ceil(3.14));
alert(Math.ceil(-1.234));
Trigonométrie
sin(x)
Description
La fonction sinus.
L'angle est à indiquer en radians.
Exemple
Ce code affichera 0 :
Code : JavaScript
alert(Math.sin(0));
cos(x)
Description
La fonction cosinus.
L'angle est à indiquer en radians.
Exemple
Ce code affichera 1 :
Code : JavaScript
alert(Math.cos(0));
tan(x)
Description
La fonction tangente.
L'angle est à indiquer en radians.
Exemple
Ce code affichera 0 :
Code : JavaScript
alert(Math.tan(0));
asin(x)
Description
Exemple
alert(Math.asin(1));
acos(x)
Description
Exemple
alert(Math.acos(0));
atan(x)
Description
Exemple
alert(Math.atan(1));
exp(x)
Description
Exemple
Code : JavaScript
log(x)
Description
Remarque
Notez que la fonction logarithme décimal n'est pas définie, ce sera à vous de le faire en cas de besoin. Il en est de
même pour un logarithme en base b quelconque.
Vous pouvez pour cela utiliser les constantes LN10, LN2, LN10E (logarithme décimal de e) et LN2E (logarithme en
base 2 de e) de notre objet Math.
Exemple
Code : JavaScript
function log10(x)
{
return Math.LOG10E * Math.log(x);
}
pow(x,y)
Description
Retourne x à la puissance y.
Exemple
function cube(x)
{
return Math.pow(x,3);
}
sqrt(x)
Description
Exemple
alert(Math.sqrt(9));
function norme(x,y)
{
return Math.sqrt(x*x + y*y);
}
Inclassables
PI
Description
Exemple
Code : JavaScript
random()
Description
Renvoie un nombre aléatoire de l'intervalle [0;1[ ; autrement dit, un nombre compris entre 0 (inclus) et 1 (exclus).
Exemple
Code : JavaScript
isNaN(x)
Description
Exemple
Code : JavaScript
isFinite(x)
Description
Renvoie true si x est un nombre que JS peut traiter, false sinon (par exemple, pour un nombre trop grand pour être
supporté par JS).
Exemple
var x = Math.pow(111,222);
if(isFinite(x))
alert("111 puissance 222 vaut " + x);
else
alert("C'est trop grand !");
parseInt(str)
Description
Exemple
Code : JavaScript
var a = parseInt("12h30");
var b = parseInt("-3.14");
var c = parseInt("Euh...");
Dans cet exemple, les variables vaudront respectivement 12 (la conversion s'arrête au "h"), -3 (car on convertit en
entier, donc on s'arrête au .) et NaN.
parseFloat(str)
Description
Exemple
Code : JavaScript
var a = parseFloat("-3.14");
var b = parseFloat("1.5m");
var c = parseFloat("3,14");
Dans cet exemple, les variables vaudront respectivement -3.14, 1.5 (la conversion s'arrête au "m") et 3 (il faut utiliser
le point, et non la virgule).
arrondir(x, n)
Ce qu'on veut...
Par exemple :
Code : Autre
arrondir(3.14, 1) = 3.1
arrondir(2.718, 2) = 2.72
arrondir(1.234, 0) = 1
Comment faire ?
Notre souci, c'est qu'elle arrondit à l'unité ; autrement dit, à l'endroit où se situe la virgule, comme ceci :
3.14159 -> 3
Ce qu'on veut, c'est arrondir "plus loin que la virgule", comme dans cet exemple :
3.14159 -> 3.14
En fait, ce qu'il faudrait, c'est déplacer la virgule, pour pouvoir arrondir avec Math.round, et ensuite remettre la
virgule au bon endroit...
Et pour la déplacer de n crans, on multiplie par 10...00 (un "1" suivit de n "0"), autrement dit, par 10 puissance n.
Allons-y
function arrondir(x, n)
Pour notre exemple arrondir(3.14159, 2), cette variable vaudra donc 100.
x *= decalage;
Ensuite, on arrondit :
Code : JavaScript
x = Math.round(x);
x /= decalage;
On a bien x = 3.14 .
return x;
function arrondir(x, n)
{
var decalage = Math.pow(10, n);
x *= decalage;
x = Math.round(x);
x /= decalage;
return x;
}
randomInt(mini, maxi)
Ce qu'on veut...
Comment faire ?
Pour l'instant, on ne sait récupérer des nombres aléatoires que dans l'intervalle [0;1[... on va donc en prendre un.
Et on termine en arrondissant à l'entier inférieur, qui est au moins mini et au plus maxi (car strictement inférieur à
maxi+1).
Code : JavaScript
L'objet "Date"
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 48 379
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
L'objet Date va, comme son nom l'indique, nous permettre d'avoir accès à la date, mais également à l'heure.
Il peut servir à l'afficher dans un coin de la page (et non pas une énorme horloge horrible qui suit la souris ) , mais aussi à
chronométrer le temps de visite d'une page ou bien le temps d'exécution d'un script JS.
Pour récupérer l'heure et la date actuelle, rien de compliqué : il suffit de créer une instance de cet objet, elle sera
initialisée avec l'heure courante (qui est l'heure du PC du visiteur).
Code : JavaScript
Maintenant qu'on a notre objet, on peut lire chaque propriété (l'heure, l'année, ...) via les fonctions présentées plus
bas.
Il est aussi possible d'initialiser l'objet à une autre date, qu'on indiquera sous forme de paramètres, comme ceci...
Code : JavaScript
Il est également possible de l'initialiser en donnant le nombre de millisecondes depuis le 01/01/1970, 0h00 :
Code : JavaScript
Passons maintenant aux méthodes, pour savoir que faire de notre nouvel objet.
Sommaire du chapitre :
Sommaire
Méthodes diverses
Récupérer et modifier l'heure
Sommaire
Méthodes diverses
Méthodes diverses
getTime()
Description
Exemple
// le script ici
var i=0
while(i < 1234567)
i++;
// fin du script
Les new Date() servent à récupérer la date et l'heure à laquelle ils sont appelés. On en place donc un au début et un
à la fin du script, et on fait la différence des getTime().
setTime(x)
Description
Exemple
Code : JavaScript
On peut ensuite récupérer le jour, l'heure, etc. avec les méthodes présentées ci-après.
getTimezoneOffset()
Description
Exemple
Code : JavaScript
Il est possible de reconstituer l'heure grâce aux méthodes qui nous permettent d'accéder au nombre de minutes, de
secondes, etc.
Comme il n'y a pas grand chose à dire de ces fonctions, nous vous proposons une fonction qui affiche l'heure.
Comme il a été dit, les jours de la semaine et les mois sont retournés sous forme de nombres.
Pour cela, il est judicieux d'utiliser un tableau, ce qui est d'autant plus simple que les nombres commencent justement
à 0.
On aura donc :
Code : JavaScript
var jours = new Array("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"
var mois = new Array("janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet",
Un autre point "sensible" : lorsque les minutes sont inférieures à 10. En effet, afficher 1h1 n'est vraiment pas
élégant...
Ceci est aussi valable pour les jours et les mois : on n'affiche pas 1/1/1970.
Il faudra donc penser à rajouter un zéro devant (sous forme de chaîne de caractères).
On va maintenant créer deux fonctions supplémentaires retournant la date pour l'une et l'heure pour l'autre, en
francais.
Pour la date, on va renvoyer une chaîne de caractères de la forme "mardi 5 avril 1988".
Code : JavaScript
function dateFr()
{
// les noms de jours / mois
var jours = new Array("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi"
var mois = new Array("janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet"
// on recupere la date
var date = new Date();
// on construit le message
var message = jours[date.getDay()] + " "; // nom du jour
message += date.getDate() + " "; // numero du jour
message += mois[date.getMonth()] + " "; // mois
message += date.getFullYear();
return message;
}
function heure()
{
var date = new Date();
var heure = date.getHours();
var minutes = date.getMinutes();
if(minutes < 10)
minutes = "0" + minutes;
return heure + "h" + minutes;
}
Maintenant, il ne vous reste plus qu'à créer un petit champ de formulaire pour afficher l'heure.
Pour qu'elle soit actualisée automatiquement, il faut utiliser setInterval(fonction, delai) qui appellera
fonction toutes les delai millisecondes.
C'est une méthode de l'objet window, elle sera abordée dans le chapitre sur ce dernier.
Et un objet de plus, un !
L'objet "String"
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 88 683
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Les chaînes de caractères, nommées String en anglais, sont elles-aussi des objets, qui sont de plus très souvent
utilisés.
Découvrons sans plus tarder les nombreuses méthodes à utiliser, pour pouvoir en faire ce qu'on veut .
Tout d'abord, celles permettant de traiter des caractères séparément (pour récupérer la position d'un caractère
dans une chaîne, ou inversement, y lire le caractère qui a une position donnée).
Puis celles qui utilisent des chaînes de caractères entières (extraire une sous-chaîne, en concaténer plusieurs,
etc.).
Enfin, des méthodes "rechercher / remplacer", qui utilisent les regex.
Ce thème et ces méthodes feront l'objet du chapitre suivant.
Sommaire du chapitre :
Sommaire
Opérations sur les caractères
Opérations sur les chaînes
Rechercher et remplacer
Sommaire
Opérations sur les caractères
Ces fonctions sont détaillées dans le chapitre consacré aux expressions régulières.
match(regex)
search(regex)
replace(regex, str)
length, le retour
Description
Notre fameuse propriété length contient la longueur de la chaîne de caractère, autrement dit, le nombre de
caractères dont cette chaîne est composée.
Exemple
Code : JavaScript
Cet exemple affichera successivement 20 (nombre de caractères dans la phrase "J'aime le JavaScript", espaces
compris) et 10 (il y a bien 10 lettres dans le mot "JavaScript").
charAt(i)
Description
Exemple
alert("JavaScript".charAt(4));
Voici une fonction qui sépare tous les caractères par un espace.
Pour cela, on parcourt la chaîne, et on recopie chaque caractère en ajoutant un espace.
Le test affichera : "V i v e - l e - J a v a S c r i p t ".
Code : JavaScript
function separer(chaine)
{
var sortie = '';
for(var i=0; i<chaine.length; i++)
sortie += chaine.charAt(i) + ' ';
return sortie;
}
alert(separer('Vive-le-JavaScript'));
indexOf(str) et lastIndexOf(str)
Description
On peut préciser, en deuxième argument, la position a partir de laquelle doit commencer la recherche.
Par défaut, il s'agit de 0 pour indexOf (le premier caractère), et de length-1 pour lastIndexOf (le dernier caractère,
car la recherche se fait en partant de la fin).
Exemple
L'adresse la plus courte qui est considérée comme correcte est donc : [email protected]
Code : JavaScript
function verifMail(email)
{
var position_at = email.indexOf('@');
var position_dot = email.lastIndexOf('.');
return (position_at > 0 && position_dot >= position_at + 2);
}
if(verifMail("[email protected]"))
alert("On dirait une adresse valide");
else
alert("L'adresse e-mail n'existe pas");
toLowerCase() et toUpperClass()
Description
JavaScript met à disposition deux méthodes permettant d'en changer la casse d'une chaîne de caractères :
Ces méthodes sont très utiles dans le traitement des chaînes de caractères.
Elle permettent par exemple de comparer des chaînes sans tenir compte de la casse.
Exemple
Comparons maitenant deux chaînes : le message sera "Ces chaînes sont les mêmes, aux majuscules près".
Code : JavaScript
concat(str), l'opérateur +
Description
L'opérateur + permet de concaténer deux chaînes : chaine+str est la chaîne constituée de chaine et de str mises
bouts-à-bouts.
Exemple
On affiche la chaîne "JavaScript", construite par concaténation (en utilisant les deux façons de faire).
Code : JavaScript
split(str)
Description
La méthode split(str) permet de découper une chaîne de caractères, en "coupant" aux endroit où la chaîne comporte
str.
Les "morceaux" découpés sont renvoyés sous forme de tableau.
Exemple
Code : JavaScript
substring(debut,fin)
Description
substring(debut,fin) renvoie la portion de chaîne délimitée par les positions debut (incluse) et fin (exclue).
Si fin n'est pas précisée, la portion est extraite de debut jusqu'à la fin de la chaîne.
Exemple
substr(debut,nombre)
Description
Exemple
Rechercher et remplacer
match(regex)
match(regex) applique l'expression régulière regex à la chaîne, et renvoie le résultat sous forme de tableau.
replace(regex, str)
replace(regex, str) remplace les sous-chaînes satisfaisant l'expression régulière regex par le motif de remplacement
str.
search(regex)
Dans le prochain chapitre, nous restons dans le même sujet, mais en abordant les regex : c'est un outil vraiment
puissant pour travailler sur les chaînes de caractères.
On peut d'ores et déjà citer la vérification d'un numéro de téléphone ou d'une adresse e-mail (plus exactement, on
vérifie s'il semble valide).
Ça permet également d'extraire des informations contenues dans une phrase qu'a écrit l'utilisateur (en particulier,
récupérer des chiffres, tel qu'un âge, dans une phrase comme "j'ai 99 ans").
Et vous verrez, les regex sont extrêmement pratique dans ce genre de situations.
L'objet "RegExp"
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 86 358
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Nous allons maintenant aborder un objet qui nous offre plus de contrôles sur les chaînes de caractères.
On le surnomme regex ; son nom est RegExp, pour Regular Expression, ce qui se traduit par "expression rationnelle"
(une autre traduction, moins parlante, est "expression régulière").
C'est un sujet qui peut très vite devenir compliqué et "prise de tête" ...
Tâchons donc de l'aborder de manière simple, mais suffisamment complète.
Sommaire
Créer une regex
Quelques exemples
Utiliser une regex
Sommaire
Créer une regex
Quelques exemples
Avant de se lancer...
Pour tester une regex, nous allons utiliser la méthode nommée test de cet objet, qui s'utilise ainsi :
Code : JavaScript
Si la chaîne de caractères str vérifie la regex maRegex, alors verifie vaut true, sinon il vaut false.
Si on devait formuler une phrase pour décrire les regex, ce serait celle-ci :
Citation : les regex
Avec test, on récupère simplement true si le motif est trouvé dans la chaîne de caractères, false sinon.
Mais on peut également récupérer les morceaux de chaînes qui satisfont le motif, ou encore les remplacer par autre
chose.
Première regex
La première, grâce à laquelle on voit bien que RegExp est une classe d'objet :
Code : JavaScript
On essaie !
Ce qui affiche également true, car la chaîne de caractères qui forme le motif (c'est "toto") a été trouvée dans notre
phrase (qui est "Bonjour toto !").
Les flags
Comme nous l'avons dit, une regex est constitué de deux choses :
un motif, qui sera recherché dans les chaînes de caractères auxquelles on appliquera notre regex,
des flags, qui sont des options supplémentaires.
Revenons sur ces derniers, qui ne devraient pas vous poser de difficultés.
Ils sont au nombre de trois :
i, pour rechercher le motif sans tenir compte de la casse (des majuscules / minuscules),
g, signifiant "global", dont on précisera l'utilisation en temps voulu (quand on parlera des fonctions utilisant les
regex),
gi = g + i (pour combiner les deux options).
Maintenant que vous savez tout des flags, concentrons-nous sur les motifs, car c'est une autre paire de manches .
Des symboles particuliers vont nous aider à rendre nos motifs beaucoup plus évolués. Vous verrez, avec tous ces
symboles, un motif complet ressemble à du martien.
Le symbole suivant est . (le point), qui signifie "n'importe quel caractère".
Ainsi, /o.o/i (notez le flag i pour ignorer la casse) sera satisfaite par : "o,O", "Toto" et "automobile".
Deux symboles nous permettent de délimiter le début et la fin de la chaîne de caractères : ce sont respectivement ^
et $.
Par exemple, /^Bonjour/ sera satisfaite uniquement avec une phrase commençant par "Bonjour", comme "Bonjour
monsieur", mais pas par "Hey ! Bonjour toi !".
Autre exemple, /!$/ va vérifier si une phrase se termine par un point d'exclamation, comme "Hey ! Bonjour toi !",
mais pas comme "Toto ?!?"
Les classes
Il est également possible de définir, au lieu d'un seul caractère, une liste de caractères (appelée classe de
caractères), en les indiquant entre crochets [].
Avec /t[iaot]c/, on peut ainsi filtrer "Et toc !", "Tic, tac...", "25? ttc", mais pas "tuc".
À l'intérieur d'une classe, il est possible d'utiliser le tiret pour définir une plage de valeur : [i-n] équivaut à
[ijklmn], et [0-9A-F] à [0123456789ABCDEF].
On peut ainsi chercher si une phrase se termine par une lettre ou un chiffre avec /[a-zA-Z0-9]$/, vérifiée par
"Bonjour", "BOB" et "Agent 007", mais pas par "Non." ni "(-_-)".
Inversement, on peut définir une classe en indiquant les caractères qui ne doivent pas y figurer, grâce à ^ placé au
début de cette classe.
Exemple : pour détecter les phrases qui ne se terminent pas par une lettre, on peut utiliser /[^a-zA-Z]$/, que
vérifie "Agent 007" mais pas "Toto".
Au début d'une classe (entre crochets), il indique quels caractères ne font pas partie de cette classe.
En dehors des crochets, il indique le début de la chaîne de caractères.
Classes existantes
Certaines classes très utilisées sont déjà définies : en voici les principales.
Dans une chaîne de caractères, l'antislash est déjà utilisé pour les caractères spéciaux. Ainsi, si vous utiliser la
notation
new RegExp("motif"),
il faut faire précéder chaque antislash d'un... antislash.
Voyez plutôt : les deux regex suivantes sont identiques :
Code : JavaScript
Les quantificateurs
Il est possible de préciser le nombre de fois que doit se répéter un "bout de motif".
Quantifier "manuellement"
On peut préciser, entre accolades {}, le nombre de fois qu'un caractère / groupe de caractères doit se répéter.
Dans cet exemple, on veut filtrer "foot" avec deux "o" : /fo{2}t/
Il est possible d'indiquer une plage de valeur : on demande au groupe de caractères de se répéter au minimum i fois,
et au maximum j fois, avec {i,j}.
Par exemple, /bo{2,5}m/ cherchera "boom" avec 2, 3, 4 ou 5 "o".
Pour utiliser en dehors d'une classe l'un des symboles, mais en tant que caractère, il faut l'échapper en le faisant
précéder d'un antislash.
Exemple : pour savoir si une chaîne se termine par ".com", on utilisera /\.com/
De même que pour les classes prédéfinies, si vous utilisez la notation new RegExp("motif"), il faut penser à
échapper les antislashes, ainsi que les guillemets !
Voici à nouveau deux regex identiques :
Code : JavaScript
Pour l'instant, nous utilisons simplement les regex pour savoir si une chaîne vérifiait un certain motif. Mais les
regex permettent bien plus que ça !
Il est également possible de savoir quelles sous-chaînes satisfont le motif, et on va même pouvoir utiliser les regex
pour en extraire certains morceaux.
Ainsi, dans une phrase telle que "les horaires sont 16h45, 17h, 17h20 et 17h40", il est possible d'extraire toutes les
heures à l'aide d'une simple regex.
Puissant !
Pour extraire certains morceaux d'une chaîne de caractères, il faut les délimiter dans notre motif. Pour ce faire, on
utilise les parenthèses, qui sont dites capturantes.
Un exemple : on veut extraire l'âge du visiteur, qui se trouve dans une chaîne du type "J'ai 99 ans".
Construisons notre motif lentement... on va d'abord se baser sur "j'ai" et "ans", sans tenir compte de la casse : /j\'ai
- ans/i
Ces mots sont séparés de l'âge par un blanc (éventuellement, l'utilisateur peut écrire "99ans" sans espace) : /j\'ai\s
- \s?ans/i
Maintenant, on ajoute les chiffres (1, 2 ou 3 chiffres), en les capturant grâce aux parenthèses : /j\'ai\s(\d{1,3})
\s?ans/i
Cependant, on peut avoir besoin de parenthèses, mais sans pour autant vouloir en capturer le contenu (par exemple,
avec le symbole | vu plus haut).
Il est possible de les rendre non-capturantes, en les faisant commencer par ?:.
Reprenons un exemple vu plus haut, en rendant les parenthèses non capturantes : /(?:st|h|p)op/
Les assertions
Mais il est possible d'utiliser ce qu'on appelle une assertion : le symbole (?= (à placer entre parenthèses) à la fin du
motif, signifie "si le motif est suivi de".
Dans l'exemple précédent, ceci nous donne /bon(?=jour)/. Comprenez-le ainsi : "bon, s'il est suivi de jour".
Ainsi, dans la phrase "Bien le bonjour, mon bon monsieur", seul le "bon", s'il est suivi de "jour", est sélectionné.
Il existe de même le symbole ?!, en fin de motif lui aussi, signifiant "si le motif n'est pas suivi de".
Ainsi, /bon(?!jour)/ (comprenez : "bon, s'il n'est pas suivi de jour") appliqué à la même phrase nous donnera ce
résultat : "Bien le bonjour, mon bon monsieur".
Remarquez qu'on retrouve le symbole = pour "est suivi de", et ! pour "n'est pas suivi de".
Comme pour les signes == et !=, le = exprime l'égalité, et le ! la négation.
Quelques exemples
En JavaScript, il est courant d'avoir à vérifier des formulaires avant de les valider. Et pour cela, les regex constituent
un outil excellent, car elles permettent de contrôler très précisément toutes les informations données par le visiteur.
Comme nous avons pu le dire, vérifier un formulaire en JavaScript est très agréable pour le visiteur, mais n'est
pas très fiable (car ce dernier peut désactiver le JS pour contourner la vérification).
Ainsi, il est courant d'effectuer une seconde vérification, en PHP cette fois, pour une vérification réellement fiable.
Et en PHP, les regex existent, et sont pratiquement identiques, ce qui nous simplifie donc la tâche si on doit faire les
deux vérifications.
Si ça, ce n'est pas une bonne nouvelle...
Revenons à nos moutons : nous voulions créer des regex pour vérifier si le pseudonyme donné par le visiteur n'est pas
trop long, si l'âge qu'il a saisi est valide, s'il n'a pas donné une adresse e-mail qui n'en est pas une, si son numéro de
téléphone est vraisemblable, etc.
Le pseudonyme
demander à ce qu'il comporte entre 3 et 16 lettres, avec éventuellement des chiffres et des tirets (hauts et bas).
L'âge
La première consiste à convertir la valeur en nombre (entier), pour la comparer à un âge minimum et à un âge
maximum.
Prenons par exemple 5 et 100 ans comme âges limites, et créons une fonction qui renvoie true si l'âge passé en
paramètre est valide :
Code : JavaScript
function ageValide(valeur)
{
var age = parseInt(valeur); // on convertit la valeur en nombre
entier
var estValide = !isNaN(age) && (age >= 5) && (age <= 100);
return estValide;
}
La première solution a l'avantage de bien s'adapter, pour deux raisons. Tout d'abord, on choisit précisément les
limites d'âge. Ensuite, la fonction de conversion est capable de "comprendre" correctement une expression telle
"99 ans", qui sera ici considérée comme valide.
Concernant la seconde solution, certain diront que "c'est comme tuer une mouche avec un bazooka".
En bon français : est-ce vraiment utile d'utiliser des moyens si "élaborés" pour tester un nombre ?
En effet, les regex sont utilisés pour analyser des chaînes de caractères. Les utiliser pour savoir si on se trouve
en présence d'un nombre peut donc sembler un peu "démesuré".
Le numéro de téléphone
Passons maintenant au numéro de téléphone, dans le cas où c'est un numéro français (le principe reste bien sûr le
même pour tous les pays).
Au passage, nous allons choisir de capturer chacun des groupes de chiffres (ce qui permettra, si besoin est, de ne
retenir que les chiffres, sans les séparateurs).
/[ _.-]?/ pour un séparateur (je vous rappelle que le ? est équivalent à {0,1}, car le séparateur est
facultatif).
/[ _.-]?(\d{2})/ : on ajoute deux chiffres après le séparateur, et on les capture grâce aux parenthèses.
/(?:[ _.-]?(\d{2})){4}/ : on répète 4 fois ce groupe "séparateur + 2 chiffre". Pour le délimiter, on utilise
des parenthèses non capturantes.
Pour l'instant, on capture donc les numéros tels que "-12-34-56-78".
/(0[1-68])(?:[ _.-]?(\d{2})){4}/ : on ajoute (et on capture avec les parenthèses) le premier groupe de
2 chiffres, dont le premier est forcément un 0, et le second est 1, 2, 3, 4, 5, 6 ou 8.
/^(0[1-68])(?:[ _.-]?(\d{2})){4}$/ : on ancre la regex : le numéro commence au début de la chaîne et
se termine à la fin.
Et comme vous mourez d'envie de la tester, voici un petit script pour demander un numéro et le tester.
Code : JavaScript
L'adresse e-mail
Après l'exemple du numéro de téléphone, vérifier une adresse e-mail ne devrait pas vous poser trop de problèmes...
reg.test(str)
reg.exec(str)
str.match(reg)
Renvoie un tableau :
s'il n'y a pas le flag "g" : le tableau contient la première expression qui satisfait le motif, et les captures (même
résultat que reg.exec(str)) ;
s'il y a le flag "g" : le tableau contient toutes les expressions satisfaisant le motif (mais sans les captures).
str.search(reg)
str.replace(reg, str2)
Remplace les expressions vérifiant le motif par la chaine str2 (uniquement la première s'il n'y a pas le flag "g", toutes
s'il y est) ; le résultat est renvoyé.
La valeur capturée par la n-ième parenthèse (n étant un numéro, plus grand ou égal à 1) est accessible via $n.
Exemple : affichera "Le grooos chat griiis est très graaas !"
Code : JavaScript
str.split(reg)
Découpe la chaine aux endroits où le motif est vérifié. Les éléments capturés via les parenthèses sont rajoutés au
découpage.
Exemple pour scinder une chaîne là où il y a des signes de ponctuation, en conservant ces signes (pour rappel, \s =
caractère blanc) :
Code : JavaScript
Ce sujet est certes difficile, mais les regex sont des outils vraiment puissants : ça vaut le coup de s'y intéresser.
Bien que nous ayons beaucoup utilisé les regex dans ce chapitre (il fallait bien des exemples), il ne faut pas
non plus en abuser, car ça peut demander beaucoup de travail à l'ordinateur.
Apprenez à les utiliser uniquement lorsqu'elles s'avèrent vraiment utiles.
L'objet "Image"
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 349 230
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Ensuite, on crée des fonctions qu'on associe aux différents évènements (tel que "chargement terminé") :
Code : JavaScript
Enfin, on indique l'adresse de l'image à l'aide de l'attribut src, ce qui aura pour effet de lancer son chargement
:
Code : JavaScript
monImage.src = "http://www.mon-site.com/une-image.png";
Sommaire du chapitre :
Sommaire
Événements
Attributs
Exemples d'utilisation
Sommaire
Évènements
Attributs
Exemples d'utilisation
chargerImage(img, src, maxWidth, maxHeight) pour charger une image et l'afficher à la place d'une
autre, en indiquant une taille maximale.
Événements
onLoad
Cet évènement se produit une fois que l'image est entièrement chargée.
onError
Cet évènement se produit si l'image ne peut pas être chargée (en particulier lorsqu'elle n'existe pas).
onAbort
Exemple
Pour illustrer ceci, chargeons une image et affichons un message une fois le chargement terminé.
On va regrouper onError et onAbort, qui concernent tous les deux un chargement impossible.
Code : JavaScript
// on crée l'objet
var image = new Image();
// cas d'erreur
image.onerror =
image.onabort = function()
{
alert("Erreur lors du chargement");
}
Attributs
src
Description
Exemple
On va charger une image, puis l'afficher sur la page (à la place d'une autre image) une fois le chargement terminé.
// on lance le chargement
image.src = "bob.png";
width et height
Description
Il faut attendre que l'image soit complètement chargée pour lire ses dimensions.
Dans le cas contraire, vous obtiendrez un résultat erroné.
Exemple
image.onerror =
image.onabort = function()
{
alert("Impossible de charger l'image");
}
image.onload = function()
{
alert("Dimensions de l'image : " + image.width + "*" + image.height);
}
// on lance le chargement
image.src = prompt("Entrez l'adresse de l'image dont vous voulez les
dimensions");
complete
Description
Cet attribut vaut true si l'image est entièrement chargée, false sinon.
Exemples d'utilisation
Pour illustrer le fonctionnement de l'objet Image, créons une fonction changerImage(img, src, maxWidth,
maxHeight).
Son but est de charger l'image dont on a précisé l'adresse via src.
Une fois cette image chargée, on l'affichera dans l'image img (qu'on pourra désigner soit directement, this par
exemple, soit par son id).
On va rendre les deux derniers arguments facultatifs : ils serviront à redimensionner l'image si elle est trop grande (si
sa largeur est plus grande que maxWidth ou sa hauteur plus grande que maxHeight).
Le squelette
Le squelette de notre programme est simple : voici une fonction basique prenant deux paramètres, qui charge une
image, puis l'affiche.
Pour les explications, je vous renvoie aux parties concernées dans ce chapitre.
Code : JavaScript
changerImage(document.getElementById("monImage"), "nouvelleImage.png");
Ne pensez-vous pas qu'il serait agréable de pouvoir appeler notre fonction soit comme ci-dessus (avec
getElementById), soit en utilisant directement l'id de l'image, comme ci-dessous ?
Code : JavaScript
Pour savoir si le paramètre est l'id ou l'image, il suffit de regarder son type : si c'est une chaîne de caractères, alors on
utilise getElementById pour récupérer l'image elle-même ; sinon, il s'agit de l'image, et on l'utilise directement.
Pour connaître le type de donnée que contient une variable, on peut utiliser typeof, qui renvoie le nom du type sous
forme de chaîne de caractères.
Il nous reste donc à rajouter ce test au début de la fonction associée à onload pour pouvoir utiliser indifféremment
l'id ou l'objet :
Code : JavaScript
Il peut être pratique de limiter la taille d'affichage d'une image (pour afficher une miniature dans un diaporama, pour
qu'une image trop grande soit affichée dans une taille raisonnable, etc.).
C'est pour cela que nous allons ajouter à notre fonction deux arguments facultatifs, maxWidth et maxHeight, pour
limiter respectivement la largeur et la hauteur de l'image.
Si l'image est trop grande, il va falloir calculer la nouvelle taille de façon à ce qu'elle ne soit pas déformée.
Un exemple : si vous avez une image de 600 * 450, mais que la taille maximale est 200 * 200, il va falloir diviser la
taille par 3 : la nouvelle taille sera donc 200 * 150, qui respectera bien la taille limite.
Dans cet exemple, 3 est appelé le coefficient de réduction.
On peut d'ores et déjà écrire le début du code, qui concerne le cas où l'image n'est pas redimensionnée : soit parce
qu'aucune taille maximale n'a été précisée, soit parce que les dimensions de l'image sont inférieures aux dimensions
maximales.
Code : JavaScript
Le coefficient de réduction est le nombre par lequel il faut diviser les dimensions de l'image.
Code : Autre
De cette manière, on trouve deux valeurs pour notre coefficient : une pour la largeur, et une pour la hauteur.
Dans notre exemple, pour l'image de 600 * 450 qu'on veut limiter à 200 * 200, on a :
Code : Autre
Pour que l'image ne soit pas déformée, il faut utiliser le même coefficient pour la largeur et pour la hauteur.
Il faut donc prendre le plus grand de nos deux coefficients (c'est 3 dans notre exemple), pour que l'image ne dépasse
pas les dimensions maximales.
Code : JavaScript
Ensuite, pour calculer les nouvelles dimensions, il ne reste qu'à diviser les dimensions de l'image par ce coefficient,
sans oublier d'arrondir les valeurs obtenues.
Voici donc la partie de notre fonction qui se chargera d'afficher l'image réduite :
Code : JavaScript
image.onload = function()
{
// si l'image est trop grande
var reduction = 1;
if(maxWidth && maxHeight)
if(image.width > maxWidth || image.height > maxHeight)
reduction = Math.max(image.width/maxWidth,
image.height/maxHeight);
Sans oublier de rajouter les deux arguments supplémentaires au début de notre fonction...
Fonction finale
Si on recolle tous les morceaux, voici donc notre fonction prête à l'emploi.
Code : JavaScript
image.onerror = function()
{
alert("Erreur lors du chargement de l'image");
}
image.onabort = function()
{
alert("Chargement interrompu");
}
// on affiche l'image
img.src = image.src;
img.width = Math.round(image.width / reduction);
img.height = Math.round(image.height / reduction);
}
image.src = src;
}
Nous avons vu comment gérer très précisément le chargement des images à l'aide du JS.
Mais attention à ne pas en abuser !
Le CSS via JS
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 205 011
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
En JS, il est possible de modifier le style de votre page : modifier la couleur d'un bloc, sa position, ses dimensions, ses bordures, le masquer, etc.
Sommaire
Exemples d'utilisation
Afficher / masquer un élément
Plusieurs classes pour un même élément
Notre fonction "getElementsByClassName"
Sommaire
Attributs des éléments de la page
Vous trouverez une liste de propriétés CSS en annexe du tutoriel XHTML / CSS.
Ces fonctions pour accéder aux éléments de la page sont des méthodes de l'objet document.
document.getElementsByClassName(classe), qui renvoie un tableau contenant tous les éléments dont on a indiqué la classe ;
document.getElementsByClassName(classe, elmt), qui renvoie les éléments contenus dans elmt dont on a indiqué la classe.
toggleVisibility(elmt) : pour rendre visible ou invisible l'élément elmt (qu'on peut également désigner par son id) ;
toggleDisplay(elmt) : pour afficher ou masquer l'élément.
getClasses(elmt), qui renvoie un tableau contenant toutes les classes de l'élément elmt (qu'on peut également désigner par son id) ;
hasClassName(elmt, className), qui renvoie true si l'élément possède la classe className, false sinon.
Exemples d'utilisation
En CSS
#exemple
{
background-color: #ff0;
color: #0f0;
font-size: 1.2em;
text-align: center;
}
En JS
Code : JavaScript
// on récupère l'élément
var elmt = document.getElementById("exemple");
Style, class et id
En CSS
Comme vous le savez sûrement, on peut modifier le style d'un élément de trois façons différentes en CSS.
<div style="color:#0f0">patati</div>
.exemple { .. }
Code : HTML
<div class="exemple">patata</div>
#exemple { .. }
Code : HTML
<div id="exemple">tralala</div>
Et en JS ?
En JS, nous disposons donc des attributs id et className pour lire ou modifier l'identifiant et la classe d'un élément.
document.getElementById("ancien_id").id = "nouvel_id";
document.getElementById("nouvel_id").className = "Une_classe";
Et on utilise le sous-objet style (comme vu un peu plus haut) pour modifier les propriétés indiquées dans l'attribut style de la balise.
div
{
background-color: blue;
}
.rouge
{
background-color: red;
}
Ajoutons sur notre page un banal div pour faire nos expériences :
Code : HTML
Code : JavaScript
divTest.className = "rouge";
divTest.style.backgroundColor = "green";
divTest.style.backgroundColor = "";
divTest.className = "";
Déplacer un bloc en JS
Maintenant qu'on a bien joué avec les couleurs, amusons-nous à déplacer un bloc.
Le bloc
<div id="test">Bonjour</div>
#test
{
background-color: yellow;
text-align: center;
vertical-align: middle;
overflow: hidden;
position: absolute;
left: 0px;
top: 0px;
width: 300px;
height: 150px;
}
Les fonctions JS
Les attributs de l'objet style sont modifiables, mais il ne sont pas pratiques pour connaître la position de l'objet.
On va donc créer deux variables, x et y, pour enregistrer la position de notre bloc par rapport à la gauche et au haut de la fenêtre.
Code : JavaScript
var x = 0;
var y = 0;
Créons également une fonction pour déplacer notre bloc d'un certain nombre de pixels, horizontalement et verticalement.
Code : JavaScript
Les commandes
Il ne nous reste plus qu'à créer des boutons pour déplacer notre bloc dans toutes les directions...
Code : HTML
Derrière ce tour de passe-passe se cachent simplement les propriétés CSS display et visibility, qu'on modifie à n'importe quel moment en utilisant l'objet
style comme vous avez appris à le faire.
Quelques remarques
visibility et display
visibility: hidden;
display: none;
Il est agréable d'avoir des fonctions qui peuvent s'utiliser de deux manières différentes :
Code : JavaScript
function toggle(elmt)
{
if(typeof elmt == "string")
elmt = document.getElementById(elmt);
[..]
}
Les fonctions
toggleVisibility
Code : JavaScript
function toggleVisibility(elmt)
{
if(typeof elmt == "string")
elmt = document.getElementById(elmt);
if(elmt.style.visibility == "hidden")
elmt.style.visibility = "visible";
else
elmt.style.visibility = "hidden";
}
Si on veut qu'un élément soit masqué au chargement de la page, il est important de le préciser via son attribut style (et non via une classe), comme
dans l'exemple ci-dessous.
Cette remarque est également valable pour la fonction toggleDisplay.
Code : HTML
toggleDisplay
Code : JavaScript
function toggleDisplay(elmt)
{
if(typeof elmt == "string")
elmt = document.getElementById(elmt);
if(elmt.style.display == "none")
elmt.style.display = "";
else
elmt.style.display = "none";
}
Par exemple, si on veut donner les classes titre, encadre et important à un DIV, on écrira :
Code : HTML
Si on affiche en JS l'attribut className d'un objet, on récupère toutes les classes dans une seule chaîne de caractères.
Qu'à cela ne tienne, si on veut récupérer les noms de classes dans un tableau JS, il nous suffit d'utiliser la méthode split de l'objet String, pour découper
notre chaîne de caractères aux endroits où se trouvent des espaces.
Il faut penser qu'il peut y avoir plusieurs espaces, on va donc utiliser une regex pour le découpage.
De plus, dans le cas où l'élément ne possède aucune classe, la fonction split renvoie quand même un tableau qui contient une chaîne vide : dans ce cas, on la
retire du tableau.
Créons donc une fonction qui renvoie toutes les classes d'un élément, sous forme de tableau :
Code : JavaScript
function getClasses(elmt)
{
if(typeof elmt == "string")
elmt = document.getElementById(elmt);
var classes = elmt.className.split(/ +/g);
if(classes.length == 1 && classes[0] == "")
classes.pop();
return classes;
}
Les multi-classes posent un autre problème : pour savoir si un objet possède une classe X, on ne peut plus faire tout simplement :
Code : JavaScript
if(emlt.className == "X");
Donc, si on veut créer une fonction hasClassName(elmt, className), qui renvoie true si elmt possède la classe className, false sinon :
Code : JavaScript
Terminons ce chapitre avec une dernière fonction, dont le but est de récupérer tous les éléments HTML d'une classe donnée.
Comme il n'en existe pas, nous allons la créer.
Nous utiliserons également une regex pour savoir si la fonction possède la classe recherchée, afin de la rendre compatible avec les multi-classes.
Petit rappel :
les tableaux possèdent la méthode push pour rajouter un élément à la fin.
Notre fonction
Code : JavaScript
return selection;
}
que la (ou les) classe(s) d'un élément sont accessibles grâce à l'attribut JS className ;
qu'on peut modifier toutes les propriétés CSS d'un élément de manière très simple :
Code : JavaScript
Syntaxe en JavaScript
Auteur : JoSé2
Plus d'informations
Popularité
Visualisations : 165 537
Appréciation 3
des lecteurs :8
21
31
Historique des mises à jour
Le 11/02/2010 à 14:56:04
Ticket #1617
Le 26/12/2009 à 20:13:16
Corrections (N°1373)
Le 22/08/2009 à 19:13:32
Mise hors-ligne du chapitre JSON
Ce chapitre n'a pas pour but d'expliquer, mais de rappeler les points principaux.
Si vous ne vous souvenez plus comment se déclare une fonction, c'est ici .
En revanche, si vous ne savez plus ce qu'est un tableau et dans quels cas on l'utilise, le chapitre du cours
traitant de ce sujet est là pour vous l'expliquer en détail, mais ce n'est certainement pas ici que vous trouverez
les explications complètes.
On va donc passer en revue toutes les bases enseignées dans la première partie de ce tutoriel. En quelque sorte, on va
rappeler les règles de la "grammaire" du JavaScript.
Au début de chaque sous-partie sera indiqué le nom du chapitre du cours traitant de ce sujet : c'est à lui que vous
devrez vous référer si vous désirez plus d'explications.
Comme leur nom l'indique, elles servent... à dialoguer avec l'utilisateur. Elles sont particulièrement pratiques pour
tester ses propres scripts , et c'est d'ailleurs pour cette raison qu'on commence par elles.
Il en existe trois sortes.
Afficher du texte
Code : JavaScript
alert('Bonjour');
Code : JavaScript
Code : JavaScript
Où se place le JS ?
Chapitre "Votre premier script"
soit directement dans les balises HTML, à l'aide d'un gestionnaire d'événements
soit entre des balises propres au JS
soit dans un fichier externe, portant l'extension .js, qui sera importé au chargement de la page.
Gestionnaires d'événements
Un gestionnaire d'événements est un attribut (une propriété) qui se place dans une balise HTML, qui s'écrit sous la
forme onEvenement.
Il a pour rôle de lancer le script lorsque l'événement spécifié se produit.
Exemple :
Code : HTML
Le gestionnaire d'événements est un attribut d'une balise HTML, et doit donc s'écrire en minuscules pour que
la page soit valide.
Même si, lorsqu'on en parle, on l'écrit avec une majuscule pour faciliter la lecture.
Balises propres au JS
<script type="text/javascript">
<!--
//-->
</script>
soit dans l'en-tête (head) de la page web : on y place du code qui doit être "mis en mémoire" pour être exécuté
plus tard.
Un exemple typique : les déclarations de fonctions.
Soit dans le corps (<body></body>) de la page, pour le code à exécuter au chargement de celle-ci.
Par exemple, des fonctions pour initialiser ou lancer un script.
La dernière méthode (la plus "propre") consiste à écrire le code JS dans un fichier séparé, portant l'extension .js.
On importe ensuite ce fichier à l'aide des balises précédentes, utilisées comme ceci (fichier.js est le nom du fichier à
importer) :
Code : HTML
De même, cette ligne peut se placer soit dans l'en-tête, soit dans le corps de la page, selon les mêmes règles que
pour le paragraphe précédent.
Lisibilité du code
Il est très important d'avoir un code lisible : ça permet de s'y retrouver, et donc d'éviter bon nombre d'erreurs.
De plus, si vous commettez une erreur (chose qui n'est pas rare), il est beaucoup plus facile de la localiser dans un
code bien organisé que dans un code illisible .
C'est donc un point à ne pas négliger...
Les commentaires
Code : JavaScript
L'indentation
Chapitre "Créer ses propres fonctions"
instruction1;
{
instruction2;
instruction3;
{
instruction4;
}
}
instruction5;
Les variables
Chapitre "Les variables"
Déclaration
Pour créer (on dit déclarer) une variable, on utilise le mot-clé var, suivi du nom qu'on veut lui donner.
Code : JavaScript
var age;
Le nom ne peut être composé que des 26 lettres, majuscules et / ou minuscules (JS fait la différence entre les
deux), des 10 chiffres et du underscore (trait de soulignement).
De plus, le nom ne doit pas commencer par un chiffre.
Affectation
Pour affecter une valeur à une variable, on utilise le signe = comme ceci :
Code : JavaScript
age = 18;
Initialisation
Variables locales
Une variable déclarée à l'intérieur d'une fonction n'est accessible qu'à l'intérieur de cette même fonction.
On parle de variable locale.
Types de données
Les nombres
var pi = 3.14;
Il y a 5 opérations de bases : l'addition (+), la soustraction (-), la multiplication (*), la division (/) et le modulo
(%).
alert(18%5);
Il existe des opérateurs supplémentaires pour faciliter les calculs avec des variables :
+= / -= / *= / /= pour : augmenter de / diminuer de / multiplier par / diviser par un nombre la valeur d'une
variable.
De même, il existe aussi %=.
++ et -- pour incrémenter / décrémenter de 1 la valeur d'une variable.
Code : JavaScript
(Notez que le nombre 18 est converti automatiquement en chaîne de caractères, pour pouvoir ensuite être concaténé.)
On peut utiliser les fonctions parseInt(chaine) et parseFloat(chaine) pour convertir une chaîne de caractères
en nombre (int : entier ou float : décimal).
C'est utile pour additionner des nombres qui sont enregistrés sous forme de chaînes de caractères : le signe + les
concatène si on l'utilise directement.
Code : JavaScript
var a = "1";
var b = "8";
alert(a+b); // affiche 18
alert(parseInt(a)+parseInt(b)); // affiche 9 :)
Les booléens
Chapitre "Les conditions"
Nous avons déjà parlé de deux types de variables : les nombres et les chaînes de caractères.
Mais nous allons maintenant avoir besoin d'un troisième type de variables : les booléens. Ces variables ont deux
Petit exemple : une variable est_majeur qui contient vrai uniquement si l'âge saisi par l'utilisateur est plus grand ou
égal à 18.
Code : JavaScript
Notez que les parenthèses autour de la condition servent à bien la distinguer (elles ne sont pas obligatoires, libre à
vous de les mettre ou non).
Nous avons vu qu'on peut additionner ou multiplier des nombres et concaténer des chaînes de caractères.
Eh bien il existe aussi des opérations sur les booléens, au nombre de trois :
Les conditions
Chapitre "Les conditions" (si si !!)
On peut effectuer un test, pour exécuter des instructions différentes selon la valeur d'un booléen.
Voici la syntaxe :
Code : JavaScript
if(booleen)
// instruction a executer si le booleen est vrai
else
// instruction a effectuer s'il est faux
Avec cette écriture, on ne peut mettre qu'une instruction dans chaque "membre".
Si on a plusieurs instructions, il suffit de les placer entre accolades, { et }.
if(booleen)
// instruction a effectuer si le booleen est vrai
On peut bien sûr effectuer des tests les uns à l'intérieur des autres (imbriqués).
0 (zéro)
"" ou '' (chaîne de caractères vide)
undefined (variable déclarée mais non définie)
null (mot-clé utilisé pour des objets "vides")
S'il manque des cas, ce sont des cas similaires
SWITCH
Mais il arrive qu'on ait besoin de tester plusieurs valeurs pour une même variable.
Dans ce cas, il est possible d'utiliser plusieurs tests : if ... else if ... else if ... else ....
En rentrant dans le switch, l'ordinateur exécute le code à partir du case correspondant, et quitte le switch lorsqu'il
rencontre break.
Les boucles
Chapitre "Les boucles"...
Les boucles permettent de répéter des instructions tant qu'une condition est vraie.
On distingue trois types de boucles, adaptées à des situations différentes.
WHILE
while(condition)
// action
Exemple :
Code : JavaScript
var i=0;
while(i<10)
{
var j = i*i;
alert("Le carré de " + i + " est " + j);
i++;
}
FOR
Cette boucle est très utilisée, car elle convient souvent au besoin.
Mais chaque boucle a une utilisation particulière : on choisit cette boucle avant tout parce qu'elle convient à notre
problème, et non pas uniquement parce qu'elle est pratique.
Un exemple :
Code : JavaScript
var i=0;
while(i<10)
{
alert(i);
i++;
}
Il faut éviter d'utiliser à l'intérieur de la boucle la variable servant de compteur (les parenthèses servent
justement à regrouper tout ce qui la concerne).
Inversement, on évitera de mettre dans ces parenthèses des choses qui n'ont rien à voir avec ce compteur.
DO .. WHILE
do
// instruction a repeter
while(condition);
Voici un exemple : on demande une chaîne de caractères à l'utilisateur tant qu'il ne clique pas sur "Annuler".
Code : JavaScript
var msg;
do
msg = prompt("Entrez ce que vous voulez, ou cliquez sur Annuler");
while(msg);
On effectue ici un test avec une valeur qui n'est pas un booléen, comme ça a été expliqué quelques
paragraphes plus haut.
var msg;
while( (msg = prompt("Entrez du texte")) != null)
alert(msg);
Et en effectuant le test directement avec une valeur qui n'est pas booléenne, on peut écrire ceci :
Code : JavaScript
var msg;
while(msg = prompt("Entrez du texte"))
alert(msg);
Les tableaux
Chapitre "Les tableaux"
Les tableaux servent à avoir accès, de manière efficace, à un grand nombre de données.
Ils permettent en effet de les numéroter, d'où leur côté pratique.
Le tableau est initialisé avec les valeurs entre parenthèses (donc ici, les éléments d'indice 0, 1 et 2 auront ces valeurs
respectives).
La variable monTableau ne contient pas directement le tableau, mais son "adresse" dans la mémoire de
l'ordinateur.
Dans l'exemple ci-dessous, t et monTableau concerneront donc le même tableau (les modifications effectuées sont
valables pour les deux noms).
Code : JavaScript
var t = monTableau;
Parcourir le tableau
Pour parcourir tout le tableau, on va utiliser une boucle pour accéder à chacun des éléments.
Dans cet exemple, on va afficher un par un tous les éléments de monTableau, et les remettre à zéro :
Code : JavaScript
On a parfois besoin de tableaux à deux dimensions : prenons l'exemple d'une grille de sudoku.
Pour créer une telle grille, on crée un "grand" tableau, qui va contenir les lignes de la grille.
Et chaque ligne sera... un "petit" tableau !
// on cree les lignes (les "petits" tableaux) les unes apres les autres
for(var i=0; i<9; i++)
grille[i] = new Array();
Les fonctions
Chapitres "Créer ses propres fonctions" (pour la partie "Généralités")
et "Retour sur les fonctions" (pour les deux autres parties)
Généralités
Déclaration
function f(x,y)
{
// code
return valeur;
};
var f = function(x,y)
{
// code
return valeur;
};
Arguments
Dans cet exemple, x et y sont les deux arguments (ou paramètres) de cette fonction.
Ce sont en fait des variables locales à la fonction, dont la valeur est fixée par l'utilisateur au moment où il appelle la
fonction.
Par exemple, si on fait :
Code : JavaScript
f(1, "Toto");
Valeur renvoyée
Une fonction peut renvoyer une valeur. Dans notre exemple, c'est la ligne return valeur (la valeur est par exemple
contenue dans une variable).
C'est en quelque sorte la valeur que "prendra" la fonction lors de son appel.
On peut la récupérer de cette manière :
Code : JavaScript
Exemple
Elle prend donc deux arguments, qui sont les nombres dont on veut la moyenne.
Elle renvoie la moyenne de ces deux nombres.
Code : JavaScript
function moyenne(x,y)
{
var moy = (x+y) / 2;
return moy;
};
Au début de la fonction, on va devoir vérifier si le second argument est défini (s'il n'est pas défini, sa valeur est
undefined). Si ce n'est pas le cas, on lui donne la valeur 0 (comme convenu).
Code : JavaScript
function moyenne(x,y)
{
if(y == undefined)
y = 0;
return (x+y) / 2;
};
On accède au tableau contenant tous les arguments passés à une fonction fct à l'aide de fct.arguments (ce sont les
arguments de fct).
function maxi(m)
{
var nb = maxi.arguments;
for(var i=1; i<nb.length; i++)
if(nb[i] > m)
m = nb[i];
return m;
}
alert( maxi(1,4,9,2,5) );
alert( maxi(4,9) );
C'est parfois utile, car on a ainsi pas mal de souplesse lors de l'utilisation .
soit vous êtes persévérants, et vous avez voulu vous accorder une séance de révisions intenses (qui n'est, à mon
avis, pas du temps perdu) : dans ce cas, j'espère que vous avez pris le temps de faire quelques "pauses" en
cours de route
soit vous êtes paresseux, et vous avez voulu éviter toute la première partie de ce cours, auquel cas vous êtes
passés à côté de nombreuses subtilités...
soit vous êtes curieux, et vous voulez un aperçu général de la première partie de ce cours : si ce résumé vous a
convaincus, direction le début du tuto pour approfondir tout cela
soit vous êtes totalement inconscients, et là je ne peux rien faire pour vous .
Toujours est-il que le but premier de ce chapitre est de mettre à votre disposition un résumé de ce qu'il faut savoir : si
vous avez des trous de mémoire, il sera votre compagnon.