Introduction au JavaScript pour le Web
Introduction au JavaScript pour le Web
Introduction :
Qui n'a jamais entendu parler du JavaScript ? Créé dans les années 90 en tant que
simple langage de script, JavaScript est désormais un des poids lourds du
développement Web ! Qui plus est, il se démocratise au sein d'autres environnements
comme les serveurs avec le célèbre Node.js, les applications pour smartphones et
tablettes, avec PhoneGap d'Adobe, les applications pour Windows 8, mais aussi les
logiciels multiplateformes.
Bref, JavaScript est partout ! Mais avant de se targuer de créer des applications pour
serveurs, tablettes et Windows, il faut d'abord apprendre la base et s'intéresser aux
origines : le JavaScript au sein des pages Web. Et ça tombe bien ; c'est le sujet de ce
cours. Chemin faisant, vous apprendrez la structure du langage, à manipuler les
événements, interagir avec les éléments HTML, dialoguer avec le serveur, faire un
système d'envoi d'images, faire un peu de dessin et des animations, et bien d'autres
choses !
Définition :
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<script>
alert('Hello world!');
</script>
</body>
</html>
Écrivez ce code dans un fichier HTML, et ouvrez ce dernier avec votre navigateur
habituel :
Tout d'abord, un élément<script>est présent : c'est lui qui contient le code JavaScript
que voici :
alert('Hello world!');
Il s'agit d'une instruction, c'est-à-dire une commande, un ordre, ou plutôt une action que
l'ordinateur va devoir réaliser. Les langages de programmation sont constitués d'une
suite d'instructions qui, mises bout à bout, permettent d'obtenir un programme ou un
script complet.
La boîte de dialoguealert()
alert()est une instruction simple, appelée fonction, qui permet d'afficher une boîte de
dialogue contenant un message. Ce message est placé entre apostrophes, elles-
mêmes placées entre les parenthèses de la fonctionalert().
La syntaxe du JavaScript
Les instructions
La syntaxe du JavaScript n'est pas compliquée. De manière générale, les instructions doivent
être séparées par un point-virgule que l'on place à la fin de chaque instruction :
instruction_1;
instruction_2;
instruction_3;
En réalité le point-virgule n'est pas obligatoire si l'instruction qui suit se trouve sur la
ligne suivante, comme dans notre exemple. En revanche, si vous écrivez plusieurs
instructions sur une même ligne, comme dans l'exemple suivant, le point-virgule est
fortement recommandé. Si le point-virgule n'est pas mis, l'interpréteur risque de ne
pas comprendre qu'il s'agit d'une autre instruction et retournera une erreur.
Instruction_1;Instruction_2
Instruction_3
Les espaces
Le JavaScript n'est pas sensible aux espaces. Cela veut dire que vous pouvez aligner
des instructions comme vous le voulez, sans que cela ne gêne en rien l'exécution du
script. Par exemple, ceci est correct :
instruction_1;
instruction_1_1;
instruction_1_2;
instruction_2; instruction_3;
Les commentaires
Les commentaires sont des annotations faites par le développeur pour expliquer le
fonctionnement d'un script, d'une instruction ou même d'un groupe d'instructions. Les
commentaires ne gênent pas l'exécution d'un script.
Il existe deux types de commentaires : les commentaires de fin de ligne, et les commentaires
multilignes.
Ils servent à commenter une instruction. Un tel commentaire commence par deux
slashs
instruction_2;
// instruction_3;
Commentaires multilignes
*/
instruction_1;
instruction_2;
instruction_2;
Les fonctions
Dans l'exemple duHello world!, nous avons utilisé la fonctionalert(). Nous
reviendrons en détail sur le fonctionnement des fonctions, mais pour les chapitres
suivants, il sera nécessaire de connaître sommairement leur syntaxe.
Une fonction se compose de deux choses : son nom, suivi d'un couple de parenthèses
(une ouvrante et une fermante) :
myFunction(); // « function » veut dire « fonction » en anglais
Entre les parenthèses se trouvent les arguments, que l'on appelle aussi paramètres.
Ceux-ci contiennent des valeurs qui sont transmises à la fonction. Dans le cas
duHello world!, ce sont les mots « Hello world! » qui sont passés en paramètre :
alert('Hello world!');
Où placer le code dans la page
Les codes JavaScript sont insérés au moyen de l'élément<script>. Cet élément
possède un attributtypequi sert à indiquer le type de langage que l'on va utiliser. Dans
notre cas, il s'agit de JavaScript, mais ça pourrait être autre chose, comme du VBScript,
bien que ce soit extrêmement rare.
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<script>
alert('Hello world!');
</script>
</body>
</html>
Le JavaScript externe
Il est possible, et même conseillé, d'écrire le code JavaScript dans un fichier externe,
portant l'extension.js. Ce fichier est ensuite appelé depuis la page Web au moyen de
l'élément<script>et de son attributsrcqui contient l'URL du fichier.js. Voici tout de
suite un petit exemple :
alert('Hello world!');
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<script src="hello.js"></script>
</body>
</html>
On suppose ici que le fichier hello.js se trouve dans le même répertoire que la page Web.
Positionner l'élément<script>
La plupart des cours de JavaScript, et des exemples donnés un peu partout, montrent qu'il faut
placer l'élément<script>au sein de l'élément<head>quand on l'utilise pour charger un fichier
JavaScript. C'est correct, oui, mais il y a mieux !
Une page Web est lue par le navigateur de façon linéaire, c'est-à-dire qu'il lit d'abord le<head>,
puis les éléments de<body>les uns à la suite des autres. Si vous appelez un fichier JavaScript
dès le début du chargement de la page, le navigateur va donc charger ce fichier, et si ce dernier
est volumineux, le chargement de la page s'en trouvera ralenti. C'est normal puisque le
navigateur va charger le fichier avant de commencer à afficher le contenu de la page.
Pour pallier ce problème, il est conseillé de placer les éléments<script>juste avant la
fermeture de l’élément<body>, comme ceci :
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<p>
<!--
...
-->
</p>
<script>
// Un peu de code JavaScript...
</script>
<script src="hello.js"></script>
</body>
</html>
Les variables :
Nous abordons enfin le premier chapitre technique de ce cours ! Tout au long de sa lecture
vous allez découvrir l'utilisation des variables, les différents types principaux qu'elles peuvent
contenir et surtout comment faire vos premiers calculs. Vous serez aussi initiés à la
concaténation et à la conversion des types. Et enfin, un élément important de ce chapitre : vous
allez apprendre l'utilisation d'une nouvelle fonction vous permettant d'interagir avec l'utilisateur !
Pour déclarer une variable, il vous faut d'abord lui trouver un nom. Il est important de
préciser que le nom d'une variable ne peut contenir que des
caractères alphanumériques, autrement dit les lettres de A à Z et les chiffres de 0 à 9 ;
l'underscore (_) et le dollar ($) sont aussi acceptés. Autre chose : le nom de la variable
ne peut pas commencer par un chiffre et ne peut pas être constitué uniquement de
mots-clés utilisés par le JavaScript. Par exemple, vous ne pouvez pas créer une
variable nomméevarcar vous allez constater que ce mot-clé est déjà utilisé, en
revanche vous pouvez créer une variable nommée var_
var myVariable;
Le JavaScript étant un langage sensible à la casse, faites bien attention à ne pas vous
tromper sur les majuscules et minuscules utilisées car, dans l'exemple suivant, nous
avons bel et bien trois variables différentes déclarées :
var myVariable;
var myvariable;
var MYVARIABLE;
Le mot-clévarest présent pour indiquer que vous déclarez une variable. Une fois celle-ci
déclarée, il ne vous est plus nécessaire d'utiliser ce mot-clé pour cette variable et vous
pouvez y stocker ce que vous souhaitez :
var myVariable;
myVariable = 2;
Le signe = sert à attribuer une valeur à la variable ; ici nous lui avons attribué le nombre
2. Quand on donne une valeur à une variable, on dit que l'on fait une affectation, car on
affecte une valeur à la variable.
var myVariable = 5.5; // Comme vous pouvez le constater, les nombres à virgule s'écrivent avec
un point.
De même, vous pouvez déclarer et assigner des variables sur une seule et même ligne
:
Et enfin une dernière chose qui pourra vous être utile de temps en temps :
myVariable1 = myVariable2 = 2;
Les deux variables contiennent maintenant le nombre 2 ! Vous pouvez faire la même
chose avec autant de variables que vous le souhaitez.
En JavaScript, nos variables sont typées dynamiquement, ce qui veut dire que l'on peut
y mettre du texte en premier lieu puis l'effacer et y mettre un nombre quel qu'il soit, et
ce, sans contraintes.
Commençons tout d'abord par voir quels sont les trois types principaux en JavaScript :
Le type numérique (alias number) : il représente tout nombre, que ce soit un
entier, un nombre négatif, scientifique, etc. Bref, c'est le type pour les nombres.
Pour assigner un type numérique à une variable, il vous suffit juste d'écrire le
nombre seul :var number = 5;
Tout comme de nombreux langages, le JavaScript reconnaît plusieurs écritures
pour les nombres, comme l'écriture décimalevar number = 5.5;ou l'écriture
scientifiquevar number = 3.65e+5;ou encore l'écriture hexadécimalevar number
= 0x391;
Bref, il existe pas mal de façons d'écrire les valeurs numériques !
Les chaînes de caractères (alias string) : ce type représente n'importe quel
texte. On peut l'assigner de deux façons différentes :
Voilà pour les trois principaux types. Il en existe d'autres, mais nous les étudierons lorsque ce
sera nécessaire.
var number = 2;
var result = 3 + 2;
alert(result); // Affiche : « 5 »
Alors vous savez faire des calculs avec deux nombres c'est bien, mais avec deux
variables contenant elles-mêmes des nombres c'est mieux :
alert(result); // Affiche : « 6 »
On peut aller encore plus loin comme ça en écrivant des calculs impliquant plusieurs
opérateurs ainsi que des variables :
result1 = (16 + 8) / 2 - 2 ; // 10
result2 = result1 / divisor;
var number = 3;
number = number + 5;
alert(number); // Affiche : « 8 »
Ce n'est pas spécialement long ou compliqué à faire, mais cela peut devenir très vite
rébarbatif, il existe donc une solution plus simple pour ajouter un nombre à une variable
:
var number = 3;
number += 5;
alert(number); // Affiche : « 8 »
Ce code a exactement le même effet que le précédent mais est plus rapide à écrire.
À noter que ceci ne s'applique pas uniquement aux additions mais fonctionne avec tous
les autres opérateurs arithmétiques :
+=
-=
*=
/=
%=
Certains opérateurs ont des particularités cachées. Prenons l'opérateur + ; en plus de
faire des additions, il permet de faire ce que l'on appelle des concaténations entre des
chaînes de caractères.
La concaténation
Une concaténation consiste à ajouter une chaîne de caractères à la fin d'une autre,
comme dans cet exemple :
result = hi + name;
var number = 3;
number += 5;
Eh bien vous pouvez faire la même chose avec les chaînes de caractères :
text += 'toi';
alert(result);
À noter que dans notre cas de figure actuel, nous concaténons des chaînes de caractères entre
elles, mais sachez que vous pouvez très bien concaténer une chaîne de caractères et un
nombre de la même manière :
alert(result);
Si vous avez essayé ce code, vous avez sûrement remarqué qu'il y a un problème.
Admettons que vous ayez tapé deux fois le chiffre 1, le résultat sera 11… Pourquoi ?
Eh bien la raison a déjà été écrite quelques lignes plus haut :
Citation
Elle renvoie ce que l'utilisateur a écrit sous forme d'une chaîne de caractères […]
Voilà le problème, tout ce qui est écrit dans le champ de texte deprompt()est récupéré
sous forme d'une chaîne de caractères, que ce soit un chiffre ou non. Du coup, si vous
utilisez l'opérateur +, vous ne ferez pas une addition mais une concaténation !
C'est là que la conversion des types intervient. Le concept est simple : il suffit de
convertir la chaîne de caractères en nombre. Pour cela, vous allez avoir besoin de la
fonctionparseInt()qui s'utilise de cette manière :
number = parseInt(text);
Maintenant que vous savez comment vous en servir, on va pouvoir l'adapter à notre
code :
Maintenant, si vous écrivez deux fois le chiffre 1, vous obtiendrez bien 2 comme résultat.
alert(text); // Affiche : « 42 »
Qu'avons-nous fait ? Nous avons juste ajouté une chaîne de caractères vide entre les
deux nombres, ce qui aura eu pour effet de les convertir en chaînes de caractères.
Il existe une solution un peu moins archaïque que de rajouter une chaîne vide mais
vous la découvrirez plus tard.
Les Conditions :
Dans le chapitre précédent vous avez appris comment créer et modifier des variables.
C'est déjà bien mais malgré tout on se sent encore un peu limité dans nos codes. Dans
ce chapitre, vous allez donc découvrir les conditions de tout type et surtout vous rendre
compte que les possibilités pour votre code seront déjà bien plus ouvertes car vos
conditions vont influer directement sur la façon dont va réagir votre code à certains
critères.
En plus des conditions, vous allez aussi pouvoir approfondir vos connaissances sur un
fameux type de variable : le booléen !
La base de toute condition : les booléens :
La condition if else :
Enfin nous abordons les conditions ! Ou, plus exactement, les structures
conditionnelles, mais nous écrirons dorénavant le mot « condition » qui sera quand
même plus rapide à écrire et à lire.
Avant toute chose, précisons qu'il existe trois types de conditions, nous allons
commencer par la conditionif elsequi est la plus utilisée.
La structureifpour dire « si »
Effectivement, nous arrivons à obtenir un résultat sous forme de booléen, mais c'est
tout. Maintenant, il serait bien que ce résultat puisse influer sur l'exécution de votre
code. Nous allons tout de suite entrer dans le vif du sujet avec un exemple très simple :
if (true) {
if (false) {
De la structure conditionnelleif;
De parenthèses qui contiennent la condition à analyser, ou plus précisément le
booléen retourné par les opérateurs conditionnels ;
D'accolades qui permettent de définir la portion de code qui sera exécutée si la
condition se vérifie. À noter que nous plaçons ici la première accolade à la fin de
la première ligne de condition, mais vous pouvez très bien la placer comme vous
le souhaitez (en dessous, par exemple).
Comme vous pouvez le constater, le code d'une condition est exécuté si le booléen
reçu esttruealors quefalseempêche l'exécution du code.
Et vu que nos opérateurs conditionnels renvoient des booléens, nous allons donc
pouvoir les utiliser directement dans nos conditions :
if (2 < 8 && 8 >= 4) { // Cette condition renvoie « true », le code est donc exécuté
if (2 > 8 || 8 <= 4) { // Cette condition renvoie « false », le code n'est donc pas exécuté
alert("La condition n'est pas vérifiée mais vous ne le saurez pas vu que ce code ne
s'exécute pas.");
Comme vous pouvez le constater, avant nous décomposions toutes les étapes d'une condition
dans plusieurs variables, dorénavant nous vous conseillons de tout mettre sur une seule et
même ligne car ce sera plus rapide à écrire pour vous et plus facile à lire pour tout le monde.
}
Un aperçu de la fonction confirm()
Comme vous pouvez le constater, le code s'exécute lorsque vous cliquez sur le
boutonOKet ne s'exécute pas lorsque vous cliquez surAnnuler. En clair : dans le premier
cas la fonction renvoietrueet dans le deuxième cas elle renvoiefalse. Ce qui en fait
une fonction très pratique à utiliser avec les conditions.
if (confirm('Pour accéder à ce site vous devez avoir 18 ans ou plus, cliquez sur "OK" si
c\'est le cas.')) {
else {
if ( /* condition */ ) {
// Du code…
} else {
// Du code…
var floor = parseInt(prompt("Entrez l'étage où l'ascenseur doit se rendre (de -2 à 30) :"));
if (floor == 0) {
} else {
À noter que la structureelse ifpeut être utilisée plusieurs fois de suite, la seule chose qui lui
est nécessaire pour pouvoir fonctionner est d'avoir une condition avec la structureifjuste avant
elle.
La condition « switch »
Nous venons d'étudier le fonctionnement de la conditionif elsequi est très utile dans
de nombreux cas, toutefois elle n'est pas très pratique pour faire du cas par cas ; c'est
là qu'intervientswitch
Prenons un exemple : nous avons un meuble avec quatre tiroirs contenant chacun des
objets différents, et il faut que l'utilisateur puisse connaître le contenu du tiroir dont il
entre le chiffre. Si nous voulions le faire avecif elsece serait assez long et fastidieux :
if (drawer == 1) {
} else if (drawer == 2) {
alert('Contient du matériel informatique : des câbles, des composants, etc.');
} else if (drawer == 3) {
} else if (drawer == 4) {
} else {
alert("Info du jour : le meuble ne contient que 4 tiroirs et, jusqu'à preuve du contraire,
les tiroirs négatifs n'existent pas.");
C'est long, non ? Et en plus ce n'est pas très adapté à ce que l'on souhaite faire. Le
plus gros problème est de devoir réécrire à chaque fois la condition ; mais
avecswitchc'est un peu plus facile :
switch (drawer) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
Comme vous pouvez le constater, le code n'est pas spécialement plus court mais il est
déjà mieux organisé et donc plus compréhensible. Détaillons maintenant son
fonctionnement :
alert("Info du jour : le meuble ne contient que 4 tiroirs et, jusqu'à preuve du contraire,
les tiroirs négatifs n'existent pas.");
Dans certains cas, ce système peut être pratique mais cela reste extrêmement rare.
Avant de clore cette partie, il est nécessaire de vous faire comprendre un point
essentiel : unswitchpermet de faire une action en fonction d'une valeur mais aussi en
fonction du type de la valeur (comme l'opérateur ===), ce qui veut dire que ce code
n'affichera jamais « Bravo ! » :
switch (drawer) {
case 1:
alert('Bravo !');
break;
default:
alert('Perdu !');
En effet, nous avons retiré la fonctionparseInt()de notre code, ce qui veut dire que
nous passons une chaîne de caractères à notreswitch. Puisque ce dernier vérifie aussi
les types des valeurs, le message « Bravo ! » ne sera jamais affiché.
switch (drawer) {
case '1':
alert('Bravo !');
break;
default:
alert('Perdu !');
if (conditionTest) {
alert('Fonctionne !');
} else {
Le code nous affiche le texte « Fonctionne ! ». Pourquoi ? Tout simplement parce que
la variableconditionTesta été convertie en booléen et que son contenu est évalué
comme étant vrai (true).
Qu'est-ce qu'un contenu vrai ou faux ? Eh bien, il suffit simplement de lister les
contenus faux pour le savoir : un nombre qui vaut zéro ou bien une chaîne de
caractères vide. C'est tout, ces deux cas sont les seuls à être évalués comme étant
àfalse. Bon, après il est possible d'évaluer des attributs, des méthodes, des objets, etc.
Seulement, vous verrez cela plus tard.
Le cas de l'opérateur OU
Encore un cas à part : l'opérateur OU ! Celui-ci, en plus de sa fonction principale,
permet de renvoyer la première variable possédant une valeur évaluée àtrue! Exemple
:
alert(conditionTest1 || conditionTest2);
var number = 0;
number = number + 1;
La variablenumbercontient donc la valeur 1. Seulement l'instruction pour ajouter 1 est assez
lourde à écrire et souvenez-vous, nous sommes des fainéants. Le JavaScript, comme d'autres
langages de programmation, permet ce que l'on appelle l'incrémentation, ainsi que son
contraire, la décrémentation.
Le fonctionnement
L'incrémentation permet d'ajouter une unité à un nombre au moyen d'une syntaxe
courte. À l'inverse, la décrémentation permet de soustraire une unité.
var number = 0;
number++;
alert(number); // Affiche : « 1 »
number--;
alert(number); // Affiche : « 0 »
Il s'agit donc d'une méthode assez rapide pour ajouter ou soustraire une unité à une variable
(on dit incrémenter et décrémenter), et cela nous sera particulièrement utile tout au long de ce
chapitre.
var number_1 = 0;
var number_2 = 0;
number_1++;
++number_2;
alert(number_1); // Affiche : « 1 »
alert(number_2); // Affiche : « 1 »
La différence réside en fait dans la priorité de l'opération, et ça a de l'importance si vous voulez
récupérer le résultat de l'incrémentation. Dans l'exemple suivant,++numberretourne la valeur
denumberincrémentée, c'est-à-dire 1.
var number = 0;
var output = ++number;
alert(number); // Affiche : « 1 »
alert(output); // Affiche : « 1 »
Maintenant, si on place l'opérateur après la variable à incrémenter, l'opération retourne la valeur
denumberavant qu'elle ne soit incrémentée :
var number = 0;
var output = number++;
alert(number); // Affiche : « 1 »
alert(output); // Affiche : « 0 »
La boucle while :
Une boucle est une structure analogue aux structures conditionnelles vues dans le chapitre
précédent sauf qu'ici il s'agit de répéter une série d'instructions. La répétition se fait jusqu'à ce
qu'on dise à la boucle de s'arrêter. À chaque fois que la boucle se répète on parle
d'itération (qui est en fait un synonyme de répétition).
Pour faire fonctionner une boucle, il est nécessaire de définir une condition. Tant que
celle-ci est vraie (true), la boucle se répète. Dès que la condition est fausse (false), la
boucle s'arrête.
while (condition) {
instruction_1;
instruction_2;
instruction_3;
}
Répéter tant que…
La bouclewhilese répète tant que la condition est validée. Cela veut donc dire qu'il faut
s'arranger, à un moment, pour que la condition ne soit plus vraie, sinon la boucle se répéterait à
l'infini, ce qui serait fâcheux.
var number = 1;
alert(number); // Affiche : « 10 »
La boucle do while
La boucledo whileressemble très fortement à la bouclewhile, sauf que dans ce cas la
boucle est toujours exécutée au moins une fois. Dans le cas d'une bouclewhile, si la
condition n'est pas valide, la boucle n'est pas exécutée. Avecdo while, la boucle est
exécutée une première fois, puis la condition est testée pour savoir si la boucle doit
continuer.
do {
instruction_1;
instruction_2;
instruction_3;
} while (condition);
On note donc une différence fondamentale dans l'écriture par rapport à la bouclewhile, ce qui
permet de bien faire la différence entre les deux. Cela dit, l'utilisation des bouclesdo
whilen'est pas très fréquente, et il est fort possible que vous n'en ayez jamais l'utilité car
généralement les programmeurs utilisent une bouclewhilenormale, avec une condition qui fait
que celle-ci est toujours exécutée une fois.
La boucle FOR :
Dans les parenthèses de la boucle ne se trouve plus juste la condition, mais trois blocs
: initialisation, condition, et incrémentation. Ces trois blocs sont séparés par un point-virgule
; c'est un peu comme si les parenthèses contenaient trois instructions distinctes.
Dans l'exemple suivant, on va afficher cinq fois une boîte de dialogue à l'aide
dealert(), qui affichera le numéro de chaque itération :
Dans le premier bloc, l'initialisation, on initialise une variable appeléeiterqui vaut 0 ; le mot-
clévarest requis, comme pour toute initialisation. On définit dans la conditionque la boucle
continue tant qu'iterest strictement inférieure à 5. Enfin, dans le bloc d'incrémentation, on
indique qu'itersera incrémentée à chaque itération terminée.
C'est tout à fait normal, pour deux raisons : le premier tour de boucle porte l'indice 0, donc si on
compte de 0 à 4, il y a bien 5 tours : 0, 1, 2, 3 et 4. Ensuite, l'incrémentation n'a pas lieu avant
chaque itération, mais à la fin de chaque itération. Donc, le tout premier tour de boucle est fait
aveciterqui vaut 0, avant d'être incrémenté.
if (nick) {
nicks += nick + ' ';
} else {
break;
}
}
alert(nicks);
Dans le bloc d'initialisation (le premier), on commence par initialiser nos deux variables.
Vient alors le bloc avec la condition (le deuxième), qui vaut simplementtrue. On termine
par le bloc d'incrémentation et… il n'y en a pas besoin ici, puisqu'il n'y a pas besoin
d'incrémenter. On le fera pour un autre exemple juste après. Ce troisième bloc est vide,
mais est requis. C'est pour cela que l'on doit quand même mettre le point-virgule après
le deuxième bloc (la condition).
if (nick) {
nicks += nick + ' ';
} else {
break;
}
}
alert('Il y a ' + i + ' prénoms :\n\n' + nicks);
La variable de boucle a été ajoutée dans le bloc d'initialisation. Le bloc d'incrémentation a lui
aussi été modifié : on indique qu'il faut incrémenter la variable de bouclei. Ainsi, à chaque
passage dans la boucle,iest incrémentée, ce qui va nous permettre de compter assez
facilement le nombre de prénoms ajoutés.
Les fonctions
Voici un chapitre très important, tant par sa longueur que par les connaissances qu'il permet
d'acquérir ! Vous allez y découvrir ce que sont exactement les fonctions et comment en créer
vous-mêmes. Tout y passera, vous saurez gérer vos variables dans les fonctions, utiliser des
arguments, retourner des valeurs, créer des fonctions dites « anonymes », bref, tout ce qu'il
vous faut pour faire des fonctions utiles !
Sur ce, nous allons tout de suite commencer, parce qu'il y a du boulot !
Pour faire simple, si l'on devait associer une fonction à un objet de la vie de tous les jours, ce
serait le moteur d'une voiture : vous tournez juste la clé pour démarrer le moteur et celui-ci fait
déplacer tout son mécanisme pour renvoyer sa force motrice vers les roues. C'est pareil avec
une fonction : vous l'appelez en lui passant éventuellement quelques paramètres, elle va
ensuite exécuter le code qu'elle contient puis va renvoyer un résultat en sortie.
Le plus gros avantage d'une fonction est que vous pouvez exécuter un code assez long
et complexe juste en appelant la fonction le contenant. Cela réduit considérablement
votre code et le simplifie d'autant plus ! Seulement, vous êtes bien limités en utilisant
seulement les fonctions natives du JavaScript. C'est pourquoi il vous est possible de
créer vos propres fonctions, c'est ce que nous allons étudier tout au long de ce chapitre.
function myFunction(arguments) {
}
Décortiquons un peu tout ça et analysons un peu ce que nous pouvons lire dans ce
code :
Bien, maintenant que vous connaissez un peu le principe d'une fonction, voici un petit
exemple :
function showMsg() {
Dans ce code nous pouvons voir la déclaration d'une fonctionshowMsg()qui exécute elle-même
une autre fonction qui n'est autre quealert()avec un message prédéfini.
Bien sûr, tout code écrit dans une fonction ne s'exécute pas immédiatement, sinon l'intérêt
serait nul. C'est pourquoi à la fin du code on appelle la fonction afin de l'exécuter, ce qui nous
affiche le message souhaité.
Un exemple concret
Comme nous le disions plus haut, l'intérêt d'une fonction réside notamment dans le fait
de ne pas avoir à réécrire plusieurs fois le même code. Nous allons ici étudier un cas
intéressant où l'utilisation d'une fonction va se révéler utile :
var result;
alert(result * 2);
alert(result * 2);
Comme vous pouvez le constater, nous avons écrit ici exactement deux fois le même
code, ce qui nous donne un résultat peu efficace. Nous pouvons envisager d'utiliser une
boucle mais si nous voulons afficher un texte entre les deux opérations comme ceci
alors la boucle devient inutilisable :
var result;
alert(result * 2);
alert(result * 2);
Notre solution, ici, est donc de faire appel au système des fonctions de cette façon :
function byTwo() {
alert(result * 2);
}
byTwo();
byTwo();
Concrètement, qu'est-ce qui a changé ? Eh bien, tout d'abord, nous avons créé une
fonction qui contient le code à exécuter deux fois (ou autant de fois qu'on le souhaite). Ensuite,
nous faisons la déclaration de notre variableresultdirectement dans notre fonction (oui, c'est
possible, vous allez obtenir de plus amples explications d'ici peu) et surtout nous appelons deux
fois notre fonction plutôt que de réécrire le code qu'elle contient.
Voilà l'utilité basique des fonctions : éviter la répétition d'un code. Mais leur utilisation peut être
largement plus poussée, continuons donc sur notre lancée !
function sayHello() {
alert(ohai);
sayHello();
ci, pas de problème, on déclare une variable dans laquelle on stocke du texte puis on
crée une fonction qui se charge de l'afficher à l'écran et enfin on exécute cette dernière.
Maintenant, nous allons légèrement modifier l'ordre des instructions mais l'effet devrait
normalement rester le même :
function sayHello() {
sayHello();
alert(ohai);
Alors ? Aucun résultat ? Ce n'est pas surprenant ! Il s'est produit ce que l'on appelle une erreur :
en clair, le code s'est arrêté car il n'est pas capable d'exécuter ce que vous lui avez demandé.
L'erreur en question (nous allons revenir sur l'affichage de cette erreur dans un futur chapitre)
nous indique que la variableohain'existe pas au moment de son affichage avec la
fonctionalert()alors que nous avons pourtant bien déclaré cette variable dans la
fonctionsayHello().
Là, ça fonctionnera ! Voilà tout le concept de la portée des variables : toute variable déclarée
dans une fonction n'est utilisable que dans cette même fonction ! Ces variables
spécifiques à une seule fonction ont un nom : les variables locales.
function showMsg() {
alert(message);
showMsg();
alert(message);
À noter que, dans l'ensemble, il est plutôt déconseillé de créer des variables globales et
locales de même nom, cela est souvent source de confusion.
Un objet est un concept, une idée ou une chose. Un objet possède une structure qui lui permet
de pouvoir fonctionner et d'interagir avec d'autres objets. Le JavaScript met à notre disposition
des objets natifs, c'est-à-dire des objets directement utilisables. Vous avez déjà manipulé de
tels objets sans le savoir : un nombre, une chaîne de caractères ou même un booléen
Exemple d'utilisation
Nous allons créer une chaîne de caractères, pour ensuite afficher son nombre de
caractères et la transformer en majuscules. Soit la mise en pratique de la partie
théorique que nous venons de voir.
Le constructeur
Le constructeur est un code qui est exécuté quand on utilise un nouvel objet. Il permet
d’effectuer des actions comme définir diverses variables au sein même de l'objet (comme le
nombre de caractères d'une chaîne de caractères). Tout cela est fait automatiquement pour les
objets natifs, nous en reparlerons quand nous aborderons l'orienté objet.
Les propriétés
Toute valeur va être placée dans une variable au sein de l'objet : c'est ce que l'on appelle
une propriété. Une propriété est une variable contenue dans l'objet, elle contient des
informations nécessaires au fonctionnement de l'objet.
Les méthodes
Enfin, il est possible de modifier l'objet. Cela se fait par l'intermédiaire des méthodes.
Les méthodes sont des fonctions contenues dans l'objet, et qui permettent de réaliser
des opérations sur le contenu de l'objet. Par exemple, dans le cas d'une chaîne de
caractères, il existe une méthode qui permet de mettre la chaîne de caractères en
majuscules
Exemple d'utilisation
Nous allons créer une chaîne de caractères, pour ensuite afficher son nombre de
caractères et la transformer en majuscules. Soit la mise en pratique de la partie
théorique que nous venons de voir.
On remarque quelque chose de nouveau dans ce code : la présence d'un point. Ce dernier
permet d'accéder aux propriétés et aux méthodes d'un objet. Ainsi, quand nous
écrivonsmyString.length, nous demandons au JavaScript de fournir le nombre de
caractères contenus dansmyString. La propriétélengthcontient ce nombre, qui a été défini
quand nous avons créé l'objet. Ce nombre est également mis à jour quand on modifie la chaîne
de caractères :
ar myString = 'Test';
alert(myString.length); // Affiche : « 4 »
Les tableaux
Souvenez-vous : dans le chapitre sur les boucles, il était question de demander à l'utilisateur les
prénoms de ses frères et sœurs. Les prénoms étaient concaténés dans une chaîne de
caractères, puis affichés. À cause de cette méthode de stockage, à part réafficher les prénoms
tels quels, on ne sait pas faire grand-chose.
C'est dans un tel cas que les tableaux entrent en jeu. Un tableau, ou plutôt un array en anglais,
est une variable qui contient plusieurs valeurs, appelées items. Chaque item est accessible au
moyen d'un indice (index en anglais) et dont la numérotation commence à partir de 0. Voici un
schéma représentant un tableau, qui stocke cinq items :
Les indices
Comme vous le voyez dans le tableau, la numérotation des items commence à 0 ! C'est très
important, car il y aura toujours un décalage d'une unité : l'item numéro 1 porte l'indice 0, et
donc le cinquième item porte l'indice 4. Vous devrez donc faire très attention à ne pas vous
emmêler les pinceaux, et à toujours garder cela en tête, sinon ça vous posera problème.
Déclarer un tableau
On utilise bien évidemmentvarpour déclarer un tableau, mais la syntaxe pour définir les
valeurs est spécifique :
Le contenu du tableau se définit entre crochets, et chaque valeur est séparée par une virgule.
Les valeurs sont introduites comme pour des variables simples, c'est-à-dire qu'il faut des
guillemets ou des apostrophes pour définir les chaînes de caractères :
La déclaration par le biais de crochets est la syntaxe courte. Il se peut que vous
rencontriez un jour une syntaxe plus longue qui est vouée à disparaître. Voici à quoi
ressemble cette syntaxe :
var myArray = new Array('Sébastien', 'Laurence', 'Ludovic', 'Pauline',
'Guillaume');
myArray[1] = 'Clarisse';
Comme dit dans la partie théorique sur les objets, les méthodes sont des fonctions, et
peuvent donc recevoir des paramètres. Ici,push()peut recevoir un nombre illimité de
paramètres, et chaque paramètre représente un item à ajouter à la fin du tableau.
alert(cousinsString);
alert(cousinsArray);
alert(cousinsString_2);
Parcourir un tableau
Soyez attentifs, il s'agit ici d'un gros morceau ! Parcourir un tableau est quelque chose que vous
allez faire très fréquemment en JavaScript, surtout plus tard, quand nous verrons comment
interagir avec les éléments HTML
Dans le chapitre sur les boucles nous avons étudié la bouclefor. Celle-ci va nous servir à
parcourir les tableaux. La bouclewhilepeut aussi être utilisée, maisforest la plus adaptée pour
cela. Nous allons voir aussi une variante defor: la bouclefor in.
Parcourir avecfor
Reprenons le tableau avec les prénoms :
Le principe pour parcourir un tableau est simple : il faut faire autant d'itérations qu'il y a d'items.
Le nombre d'items d'un tableau se récupère avec la propriétélength, exactement comme
pour le nombre de caractères d'une chaîne de caractères. À chaque itération, on va avancer
d'un item dans le tableau, en utilisant la variable de bouclei: à chaque itération, elle
s'incrémente, ce qui permet d'avancer dans le tableau item par item. Voici un exemple :
alert(myArray[i]);
On commence par définir la variable de bouclei. Ensuite, on règle la condition pour que la
boucle s'exécute tant que l'on n'a pas atteint le nombre d'items.myArray.lengthreprésente
le nombre d'items du tableau, c'est-à-dire cinq.
Attention à la condition
Nous avons volontairement mal rédigé le code précédent. En effet, dans le chapitre sur les
boucles, nous avons dit que le deuxième bloc d'une bouclefor, le bloc de condition, était
exécuté à chaque itération. Ici ça veut donc dire quemyArray.lengthest utilisé à chaque
itération, ce qui, à part ralentir la boucle, n'a que peu d'intérêt puisque le nombre d'items du
tableau ne change normalement pas (dans le cas contraire, n'utilisez pas la solution qui suit).
L'astuce est de définir une seconde variable, dans le bloc d'initialisation, qui contiendra la valeur
delength. On utilisera cette variable pour la condition :
alert(myArray[i]);
Nous utilisonsccomme nom de variable, qui signifie count (compter), mais vous pouvez utiliser
ce que vous voulez.
Les objets littéraux
S'il est possible d'accéder aux items d'un tableau via leur indice, il peut être pratique d'y
accéder au moyen d'un identifiant. Par exemple, dans le tableau des prénoms, l'item
appelésisterpourrait retourner la valeur « Laurence ».
Pour ce faire, nous allons créer nous-mêmes un tableau sous la forme d'un objet littéral. Voici
un exemple
var family = {
self: 'Sébastien',
sister: 'Laurence',
brother: 'Ludovic',
cousin_1: 'Pauline',
cousin_2: 'Guillaume'
};
Cette déclaration va créer un objet analogue à un tableau, excepté le fait que chaque item sera
accessible au moyen d'un identifiant, ce qui donne schématiquement ceci :
Quelques petites explications s'imposent sur les objets, et tout particulièrement sur leur
syntaxe. Précédemment dans ce chapitre vous avez vu que pour créer un array vide il
suffisait d'écrire :
var myArray = [];
Pour les objets c'est à peu près similaire sauf que l'on met des accolades à la place des
crochets :
var myObject = {};
Pour définir dès l'initialisation les items à ajouter à l'objet, il suffit d'écrire :
var myObject = {
family.sister;
Il existe une autre manière, semblable à celle qui permet d'accéder aux items d'un
tableau en connaissant l'indice, sauf qu'ici on va simplement spécifier le nom de la
propriété :
family['sister'];
Cela va nous être particulièrement utile si l'identifiant est contenu dans une variable,
comme ce sera le cas avec la boucle que nous allons voir après. Exemple :
var id = 'sister';
La bouclefor inest l'équivalent de la boucleforeachdu PHP : elle est très simple et ne sert
qu'à une seule chose : parcourir un objet.
Le fonctionnement est quasiment le même que pour un tableau, excepté qu'ici il suffit
de fournir une « variable clé » qui reçoit un identifiant (au lieu d'un index) et de spécifier
l'objet à parcourir :
for (var id in family) { // On stocke l'identifiant dans « id » pour
parcourir l'objet « family »
alert(family[id]);
Parce que les tableaux se voient souvent attribuer des méthodes supplémentaires par certains
navigateurs ou certains scripts tiers utilisés dans la page, ce qui fait que la bouclefor inva
vous les énumérer en même temps que les items du tableau.
L'exemple classique est la fonction qui calcule des coordonnées d'un élément HTML
sur une page Web. Il faut ici retourner les coordonnéesxety.
function getCoords() {
return {
x: 12,
y: 21
};
alert(coords.x); // 12
alert(coords.y); // 21
La valeur de retour de la fonctiongetCoords()est mise dans la variablecoords, et l'accès
àxetyen est simplifié
Le document
L'objetdocumentest un sous-objet dewindow, l'un des plus utilisés. Et pour cause, il
représente la page Web et plus précisément la balise<html>. C'est grâce à cet élément-
là que nous allons pouvoir accéder aux éléments HTML et les modifier. Voyons donc,
dans la sous-partie suivante, comment naviguer dans le document.
getElementById()
<div id="myDiv">
</div>
<script>
alert(div);
</script>
getElementsByTagName():
Cette méthode permet de récupérer, sous la forme d'un tableau, tous les éléments de la famille.
Si, dans une page, on veut récupérer tous les<div>, il suffit de faire comme ceci :
var divs = document.getElementsByTagName('div');
1. Cette méthode est accessible sur n'importe quel élément HTML et pas
seulement sur l'objetdocument.
2. En paramètre de cette méthode vous pouvez mettre une chaîne de caractères
contenant un astérisque * qui récupérera tous les éléments HTML contenus dans
l'élément ciblé.
getElementsByName()
Le contenu :innerHTML
La propriétéinnerHTMLest spéciale et demande une petite introduction. Elle a été créée par
Microsoft pour les besoins d'Internet Explorer et a été normalisée au sein du HTML5. Bien que
non normalisée pendant des années, elle est devenue un standard parce que tous les
navigateurs la supportaient déjà, et non l'inverse comme c'est généralement le cas.
Récupérer du HTML
innerHTMLpermet de récupérer le code HTML enfant d'un élément sous forme de texte.
Ainsi, si des balises sont présentes,innerHTMLles retournera sous forme de texte :
<body>
<div id="myDiv">
</div>
<script>
alert(div.innerHTML);
</script>
</body>
Nous avons donc bien une boîte de dialogue qui affiche le contenu demyDiv, sous forme de
texte :
Pour éditer ou ajouter du contenu HTML, il suffit de faire l'inverse, c'est-à-dire de définir
un nouveau contenu :
Si vous voulez ajouter du contenu, et ne pas modifier le contenu déjà en place, il suffit
d’utiliser+=à la place de l'opérateur d'affectation :
Toutefois, une petite mise en garde : il ne faut pas utiliser le += dans une boucle ! En
effet,innerHTMLralentit considérablement l'exécution du code si l'on opère de cette manière, il
vaut donc mieux concaténer son texte dans une variable pour ensuite ajouter le tout
viainnerHTML. Exemple :
var text = '';
while ( /* condition */ ) {
element.innerHTML = text; // Une fois la concaténation terminée, on ajoute le tout à « element » via
innerHTML
innerText et textContent
Penchons-nous maintenant sur deux propriétés analogues àinnerHTML:innerTextpour Internet
Explorer ettextContentpour les autres navigateurs.
innerText
<body>
<div id="myDiv">
</div>
<script>
alert(div.innerText);
</script>
</body>
Ce qui nous donne bien « Un peu de texte et un lien », sans les balises :
Tester le navigateur
Il est possible via une simple condition de tester si le navigateur prend en charge telle
ou telle méthode ou propriété.
<body>
<div id="myDiv">
</div>
<script>
txt = div.textContent;
alert(txt);
</script>
</body>
Les événement :
Les événements permettent de déclencher une fonction selon qu'une action s'est
produite ou non. Par exemple, on peut faire apparaître une fenêtrealert()lorsque
l'utilisateur survole une zone d'une page Web.
« Zone » est un terme un peu vague, il vaut mieux parler d'élément (HTML dans la
plupart des cas). Ainsi, vous pouvez très bien ajouter un événement à un élément de
votre page Web (par exemple, une balise<div>) pour faire en sorte de déclencher un
code JavaScript lorsque l'utilisateur fera une action sur l'élément en question
Voici la liste des événements principaux, ainsi que les actions à effectuer pour qu'ils se
déclenchent :
Nom de
Action pour le déclencher
l'événement
Le mot-cléthis
Ce mot-clé n'est, normalement, pas censé vous servir dès maintenant, cependant il est toujours
bon de le connaître pour les événements. Il s'agit d'une propriété pointant sur l'objet
actuellement en cours d'utilisation. Donc, si vous faites appel à ce mot-clé lorsqu'un événement
est déclenché, l'objet pointé sera l'élément qui a déclenché l'événement. Exemple :
<input id="in" type="text" size="50" value="Cliquez ici !" onfocus="this.value='Appuyez maintenant sur
votre touche de tabulation.';" onblur="this.value='Cliquez ici !';"/>
<br /><br/>
Comme vous pouvez le constater, lorsque vous cliquez sur l'input, celui-ci « possède » le
focus : il exécute donc l'événement et affiche alors un texte différent vous demandant d'appuyer
sur votre touche de tabulation. L'appui sur la touche de tabulation permet de faire passer le
focus à l'élément suivant. En clair, en appuyant sur cette touche vous faites perdre le focus à
l'input, ce qui déclenche l'événementblur(qui désigne la perte du focus) et fait passer le
focus sur le lien qui affiche alors son message grâce à son événementfocus.
Dans certains cas, vous allez devoir créer des liens juste pour leur attribuer un
événementclicket non pas pour leur fournir un lien vers lequel rediriger. Dans ce genre de
cas, il est courant de voir ce type de code :
<a href="javascript: alert('Vous avez cliqué !');">Cliquez-moi !</a>
};
Il est important de préciser que l'objetEventpeut se récupérer dans un argument autre quee!
Vous pouvez très bien le récupérer dans un argument nommétest,hello, ou autre… Après
tout, l'objetEventest tout simplement passé en référence à l'argument de votre fonction, ce qui
vous permet de choisir le nom que vous souhaitez.
Si un champ de formulaire (fname) est vide, cette fonction alerte un message et renvoie la valeur false
pour empêcher la soumission du formulaire:
function validateForm() {
var x = document.forms["myForm"]["fname"].value;
if (x == "") {
alert("Name must be filled out");
return false;
}
}
<!DOCTYPE html>
<html>
<head>
<script>
function validateForm() {
var x = document.forms["myForm"]["fname"].value;
if (x == "") {
return false;
</script>
</head>
<body>
</form>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
function myFunction() {
var x, text;
x = document.getElementById("numb").value;
} else {
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
</form>
<p>If you click submit, without filling out the text field,
</body>
</html>
La validation des données consiste à s'assurer que les entrées de l'utilisateur sont propres, correctes et
utiles.
Le plus souvent, la validation des données a pour but de garantir une saisie correcte de l'utilisateur. La
validation peut être définie par différentes méthodes et déployée de différentes manières. La validation
côté serveur est effectuée par un serveur Web, une fois que les données ont été envoyées au serveur.
La validation côté client est effectuée par un navigateur Web avant que les entrées ne soient envoyées à
un serveur Web.