Javascript: Olivier Hondermarck
Javascript: Olivier Hondermarck
Javascript: Olivier Hondermarck
TOUT
JavaScript
Maîtrisez l’ensemble des fonctionnalités du JavaScript actuel
Démarrez Node.js et les frameworks React, Angular, Vue et jQuery
Construisez votre environnement de travail avec Docker
Pratiquez avec le site tjavascript.com
2e édition
Toutes les marques citées dans cet ouvrage
sont des marques déposées par leurs propriétaires respectifs.
© Dunod, 2020
11 rue Paul Bert, 92240 Malakoff
www.dunod.com
ISBN 978-2-10-081430-5
Avant-propos
¡¡ Erratum
La page http://www.toutjavascript.com/livre/erratum.php contient les éventuels errata
relevés par les lecteurs. N’hésitez pas à y déposer vos remarques pour améliorer et
compléter les informations publiées.
¡¡ Remerciements
Je tiens à remercier les lecteurs de mes précédents livres, sans qui cette seconde édition
n’aurait pas existé.
Je remercie également mon éditeur, Jean-Luc Blanc, chez Dunod, pour son profession
nalisme. Il a réussi à me comprendre et à me motiver. Merci aussi à Brice Martin, relec-
teur chez Dunod d’une rare efficacité.
Sans la patience et les encouragements de Stephy, je n’aurai jamais été au bout de ce
long travail.
Merci à ma mère pour la relecture attentive du manuscrit.
Mon chien, qui a supporté les longs mois d’écriture des deux livres, ne verra hélas pas
l’aboutissement de cette version.
Je profite également de cet espace un peu plus personnel pour exprimer ma gratitude
en tant qu’entrepreneur du web à trois sociétés incontournables. Elles ont énormément
participé à la démocratisation d’Internet et donc à la réussite d’entreprises telles que la
mienne :
99Google, pour avoir rendu l’accès à l’information bien plus facile aux utilisateurs ;
99Free et son patron emblématique, Xavier Niel, pour avoir créé les forfaits illimités
ADSL et Mobile à tarifs imbattables ;
99OVH et son créateur, Octave Klaba, pour avoir offert des solutions d’hébergement
fiables et très abordables à tous les diffuseurs de contenus.
Table des matières
Avant-propos........................................................................................................................................................ III
PREMIÈRE PARTIE
Les bases du JavaScript
11 Réflexions autour du JavaScript................................................................................................. 3
1.1 JavaScript, c’est quoi ? ........................................................................................................... 3
1.2 Brève histoire du JavaScript.................................................................................................... 4
1.3 Le standard ECMAScript........................................................................................................... 4
1.4 Rappel sur le principe client/serveur.................................................................................. 6
1.5 Les possibilités du JavaScript................................................................................................. 8
1.6 Limites et sécurités du JavaScript....................................................................................... 9
1.7 Impact sur les performances et le référencement.................................................... 10
1.8 L’image du JavaScript et son avenir.................................................................................... 10
1.9 L’évolution des navigateurs et la malédiction IE.......................................................... 11
1.10 Place du JavaScript dans un projet web........................................................................... 12
22 Hello(s) World(s)....................................................................................................................................... 13
2.1 Les exemples de Hello World................................................................................................. 13
2.2 La console des navigateurs...................................................................................................... 17
2.3 L’extension Web Developer...................................................................................................... 20
2.4 L’outil Google PageSpeed.......................................................................................................... 20
2.5 JavaScript non activé................................................................................................................... 21
2.6 Le bon éditeur de texte.............................................................................................................. 22
2.7 Programmer et partager du JS en ligne........................................................................... 22
2.8 Mettre un site en ligne................................................................................................................ 23
2.9 Les bonnes pratiques.................................................................................................................. 24
55 Les mathématiques.............................................................................................................................. 77
5.1 Les conversions de types de données............................................................................. 77
5.2 L’objet Math....................................................................................................................................... 80
5.3 Les nombres aléatoires.............................................................................................................. 81
5.4 L’affichage formaté de nombres............................................................................................ 83
5.5 Le type BigInt................................................................................................................................... 84
66 Manipulation de dates........................................................................................................................ 89
6.1 L’objet Date........................................................................................................................................ 89
6.2 Les minuteries................................................................................................................................. 93
6.3 L’affichage formaté de dates.................................................................................................... 94
6.4 La bibliothèque Moment.js...................................................................................................... 95
10
10 L’objet maître window........................................................................................................................ 149
10.1 L’objet window................................................................................................................................. 149
10.2 Manipulation des pop-up........................................................................................................... 157
10.3 Manipulation des frames........................................................................................................... 159
Table des matières VII
DEUXIÈME PARTIE
L’interactivité
11
11 La programmation événementielle........................................................................................... 163
11.1 Programmation événementielle............................................................................................ 163
11.2 Le gestionnaire d’événements en détail.......................................................................... 166
12
12 Manipuler le document...................................................................................................................... 177
12.1 Le HTML dynamique.................................................................................................................... 177
12.2 Trouver les éléments du document.................................................................................... 178
12.3 Manipuler les éléments.............................................................................................................. 184
12.4 Créer de nouveaux éléments.................................................................................................. 194
12.5 Le drag and drop............................................................................................................................. 201
12.6 La sélection de texte.................................................................................................................... 202
13
13 Les formulaires......................................................................................................................................... 209
13.1 L’objet Form....................................................................................................................................... 209
13.2 Les éléments de formulaires.................................................................................................. 213
13.3 Les contrôles de saisie............................................................................................................... 231
13.4 Les données côté serveur........................................................................................................ 231
14
14 Les appels AJAX...................................................................................................................................... 235
14.1 Appels asynchrones..................................................................................................................... 235
14.2 Le traitement côté serveur....................................................................................................... 239
14.3 Les contraintes liées à AJAX................................................................................................... 241
15
15 Traitements asynchrones avec Promise................................................................................. 245
15.1 Les traitements asynchrones.................................................................................................. 245
15.2 L’objet Promise................................................................................................................................ 245
15.3 Promise dans la vraie vie........................................................................................................... 248
16
16 La gestion des erreurs......................................................................................................................... 251
16.1 La détection d’une erreur.......................................................................................................... 251
16.2 L’objet Error........................................................................................................................................ 253
17
17 Les cookies et l’objet Storage....................................................................................................... 257
17.1 Les cookies........................................................................................................................................ 257
17.2 Le stockage de données locales........................................................................................... 262
17.3 Les différences entre cookie et l’objet Storage........................................................... 263
18
18 La géolocalisation.................................................................................................................................. 265
18.1 Confidentialité et sécurité......................................................................................................... 265
18.2 Obtenir la position actuelle....................................................................................................... 265
18.3 Obtenir les positions régulièrement................................................................................... 267
18.4 Les scripts de cartographie...................................................................................................... 267
VIII Table des matières
19
19 Les notifications...................................................................................................................................... 269
19.1 Le principe des notifications.................................................................................................... 269
19.2 Les notifications en JavaScript............................................................................................... 270
20
20 Le dessin et les canvas....................................................................................................................... 273
20.1 L’élément canvas............................................................................................................................ 273
20.2 Interactivités et animations...................................................................................................... 283
TROISIÈME PARTIE
Pour aller encore plus loin avec JavaScript
21
21 Monétisation et publicité................................................................................................................. 289
21.1 La monétisation............................................................................................................................... 289
21.2 La publicité......................................................................................................................................... 290
21.3 Les bloqueurs de publicité........................................................................................................ 291
Index................................................................................................................................................................ 429
PREMIÈRE PARTIE
Les bases
du JavaScript
Dans tous les langages et tous les domaines de compétence, des bases
saines sont nécessaires pour progresser de manière efficace et durable.
Cette première partie ne sera pas pour autant rébarbative. Elle permettra
une bonne compréhension de l’usage du JavaScript, de ses possibilités et
de ses limites.
Tous les chapitres expliquent les notions en tenant en compte de la norme
ECMAScript 6. Le dernier chapitre de cette première partie regroupe toutes
les nouveautés d’ECMAScript 6 et sera particulièrement utile aux lecteurs
ayant besoin d’une mise à jour sur les nouveautés du langage.
1
Réflexions
autour du JavaScript
Dans ce chapitre, nous allons définir les grands principes du JavaScript dans
l’appel et le rendu d’une page web et, au travers de ses 25 ans d’histoire, ses
possibilités, ses limites et son avenir.
Par convention et par son historique, si aucune précision n’est apportée, le JavaScript dont
nous parlons dans ce livre se rapporte au script exécuté dans une page HTML.
Le JavaScript, fort logiquement abrégé JS, n’a pas de logo officiel. Le logo qui a tendance
à s’imposer actuellement est un simple carré jaune, avec les lettres noires JS alignées en
bas à droite.
Logo du langage JavaScript
Un navigateur est un logiciel de navigation sur l’ensemble des sites Internet du web. Nous
emploierons également dans ce guide le terme original anglais de browser.
1. 3 LE STANDARD ECMASCRIPT
Le langage JavaScript a été standardisé à partir de 1997 par l’organisation ECMA Inter
national sous le nom ECMAScript avec le standard numéro ECMA-262. Aujourd’hui,
JavaScript, JS, ECMAScript et son abréviation ES désignent le même langage.
Depuis la première version du standard, le langage a naturellement évolué pour prendre
en compte les nouvelles technologies matérielles, les nouvelles propositions et les nou-
veaux besoins des membres de l’organisation, et pour corriger les bogues. Les différentes
versions de standards ECMAScript ont ensuite été adoptées et implémentées par les édi-
teurs de navigateurs, plus ou moins rapidement, et avec plus ou moins de bonne volonté.
N’oublions pas que les membres de l’organisation, comme Google, Apple ou Microsoft,
sont également de féroces concurrents au quotidien.
1.3 Le standard ECMAScript 5
Nom Année
Événements notables
de l’édition de publication
Ce tableau montre les difficultés rencontrées par les membres pour tomber d’accord. Il a
fallu dix ans entre la publication de la version ES3 et celle de la version ES5, avec entre-
temps l’abandon notable de ES4.
Dix ans représentent une éternité sur le web. Des technologies apparaissent, des géants
naissent et des champions d’hier meurent en moins d’une décennie.
© Dunod – Toute reproduction non autorisée est un délit.
Chaque navigateur a donc développé des fonctionnalités et des rendus qui lui étaient
propres dans un esprit de conquête de parts de marché.
Cette absence de concertation a été un véritable calvaire pour les développeurs web, avec
de nombreuses versions de leur site à maintenir et avec de nombreuses exceptions et
incompatibilités.
Il a fallu encore six ans pour arriver à la version ES6, appelée aussi ES2015, et parvenir
à une spécification du langage complète et moderne, qui peut être considérée comme
entièrement disponible dans la dernière version à jour de l’ensemble des navigateurs du
marché.
La version ES6 a défini de nouvelles formes de notations qui nécessitent un chapitre
entier de remise à niveau pour les développeurs web habitués à la syntaxe plus classique
(voir chapitre 9, page 139).
Pour éviter de nouveaux délais aussi longs et des changements aussi radicaux après
chaque publication, il a été décidé que les éditions suivantes seraient moins ambitieuses
et adopteraient le principe d’itérations régulières et annuelles, plus faciles à définir et à
implémenter.
par le navigateur.
Le protocole HTTP/2 est une nouvelle version majeure encore peu utilisée du protocole
HTTP destinée à accélérer les transferts sur le réseau. Une seule requête peut maintenant
contenir plusieurs ressources à la fois (images, vidéos, fichiers JavaScript…), réduisant
fortement la latence et les temps de rendu de la page complète.
Nous verrons à plusieurs reprises dans ce livre les implications concrètes sur le dévelop-
pement web des différentes phases de communication entre les côtés client et serveur.
8 Chapitre 1 Réflexions autour du JavaScript
C, Java… De plus en plus de sites sont développés en JavaScript côté serveur : forums,
outils de statistiques, interfaces d’administration…
ments en espérant que l’utilisateur paiera une rançon en échange d’une clé de déblocage.
De la même manière, un script ne peut pas récupérer uniquement par lui-même les infor-
mations d’identification sur le site de votre banque en ligne. Mais si un script utilise la
technique de phishing, ou « hameçonnage », et tente de se faire passer pour le site d’une
banque, via des redirections invisibles et une interface identique, la sécurité native est
contournée. C’est à l’utilisateur d’être attentif sur ce qu’il fait et sur quel site il le fait.
Le JavaScript ne permet pas non plus d’obtenir l’adresse IP de l’utilisateur.
Les limites imposées par le langage et sa bonne sécurité font partie des raisons qui ont
permis son universalité qui le rendent incontournable.
10 Chapitre 1 Réflexions autour du JavaScript
Le JavaScript est un langage de script intégré au code HTML de la page web. Il n’est donc
pas possible de cacher son code source au monde extérieur. Le navigateur en a besoin
pour l’exécuter, comme il a besoin du code HTML pour interpréter et afficher la page.
Des systèmes d’obfuscation, littéralement « obscurcissement », existent pour rendre le
code difficilement compréhensible par un humain, en le compactant au maximum et en
changeant entre autres le nom des fonctions et des variables. Mais l’essence du code est
toujours présente et un travail de reverse engineering, opération inverse à l’obfuscation,
est relativement simple à réaliser sur un script.
Notez que le code JavaScript côté serveur n’est pas du tout visible par le monde extérieur.
Il s’exécute sur le serveur et retourne du code HTML ou des données, le plus souvent au
format JSON.
déclencher des animations inutiles. Les programmeurs lui reprochent sa syntaxe brouil-
lonne et laxiste. Le milieu du web imagine qu’il suffit de le substituer à une bibliothèque de
scripts ou à un framework pour répondre à tous les besoins en une ligne de code.
Bref, le JavaScript est totalement incompris, même par des développeurs web qui le
connaissent et se souviennent des incompatibilités entre navigateurs, des tests intermi-
nables et des rustines répugnantes à mettre en place.
Depuis ECMAScript 6, les navigateurs se comportent bien sur l’ensemble des fonction-
nalités de base. Le langage a beaucoup progressé, sans corriger toutefois certaines inco-
hérences issues de son histoire chaotique. Mais il est maintenant possible de créer des
projets incroyables. Le chapitre 9 est dédié à une « révision » (au sens de nouvelle vision)
du JavaScript, alias ES6.
Le JavaScript, 25 ans après sa création, est enfin standardisé et régulièrement maintenu
par une organisation puissante. Il est utilisé, sans qu’ils le sachent, par 4,5 milliards d’inter-
nautes dans le monde, selon des estimations de 20201. Il est au cœur du modèle écono-
mique publicitaire du web. En l’absence de langage alternatif, il est donc incontournable.
Difficile d’imaginer, sans une révolution complète de l’accès au web, que le JavaScript ne
poursuive pas sa croissance aux niveaux usage, compatibilité et fonctionnalités.
1. 9 L
’ÉVOLUTION DES NAVIGATEURS
ET LA MALÉDICTION IE
Si le calvaire des développeurs des débuts d’Internet est définitivement terminé, grâce à
l’arrivée de la version ES6, il semblerait que de nouvelles difficultés se profilent de nou-
veau en 2020.
Microsoft, en difficulté sur Internet au début des années 2010, a changé plusieurs fois
de stratégie. En 2015, Internet Explorer (connu sous l’abréviation IE) n’est plus le navi-
gateur officiel de Microsoft sur les ordinateurs de bureau. Il est remplacé par Edge sur
Windows 10. Dès 2018, Edge est porté sur tablettes et smartphones Apple et Android.
Pourtant, en janvier 2020, Microsoft change encore complètement d’orientation en rem-
plaçant son navigateur Edge de 2015 par un nouveau Edge basé sur le moteur de rendu
HTML Chromium, celui de Google Chrome. Edge Chromium est porté sur toutes les ver-
sions de Windows (7, 8 et 10) et sur macOS. Le navigateur Edge original est renommé en
« Edge hérité » (ou Edge legacy, en anglais).
À la disponibilité de trois navigateurs complètement différents sur une période de seulement
cinq ans s’ajoutent des choix de nommage en doublon qui amplifient l’incompréhension.
Voici le tableau des navigateurs disponibles sur les systèmes Microsoft à ce jour :
Année
Navigateur Logo Évolutions
de création
Navigateur historique de Microsoft sous
Version 1 moteur de rendu HTML Trident
Internet en 1955
Abandonné en 2015. Seules des mises à jour
Explorer Version 11 de sécurité sont développées
en 2013
Supporte seulement une partie de ES6
Année
Navigateur Logo Évolutions
de création
Malheureusement, Microsoft n’a pas osé aller jusqu’au bout de sa stratégie en forçant
le remplacement de ces deux navigateurs obsolètes, Internet Explorer et Edge hérité,
par Edge Chromium. Les développeurs web sont donc contraints de travailler avec des
navigateurs qui n’évoluent plus et qui ne suivent plus les progrès des itérations annuelles
de ECMAScript. Ainsi, Internet Explorer, encore largement utilisé dans le monde, ne sup-
porte pas la totalité de ECMAScript 2015. Et comme son développement est abandonné,
il ne s’améliorera plus.
Début 2020, la part de marché de Internet Explorer est encore estimée autour de 2 % à
3 %2. Cette proportion représente encore trop d’utilisateurs pour les ignorer complètement.
On peut aussi considérer qu’il s’agit des utilisateurs les moins à l’aise avec les outils infor-
matiques et qu’ils seront longtemps bloqués sur cette version d’Internet Explorer, pour des
raisons de connaissances techniques ou de moyens financiers pour changer de matériel.
Dans cet ouvrage, la plupart des fonctionnalités présentées sont compatibles avec tous
les navigateurs. Certaines ne le sont pas avec Internet Explorer mais sont tout de même
abordées en raison de leur intérêt et de leur potentiel. Si un site Internet public doit tenir
compte de l’ensemble du parc utilisateur, une application d’entreprise peut imposer des
choix techniques et autorise un accès aux techniques de développement plus récentes.
Hello(s) World(s)
<script type="text/javascript">
window.document.write("Hello World");
</script>
</h1>
</body>
</html>
Ce premier exemple très simple est finalement riche d’enseignements. Il nous apprend que :
99Le code JavaScript est intégré au code HTML classique d’une page web.
99Le JavaScript est placé dans le bloc marqué par les balises <script type="text/
javascript"></script>.
99Le JavaScript utilise la notation pointée window.document.write() pour appe-
ler la fonction write() de l’objet document, lui-même rattaché à l’objet racine
window.
99Le JavaScript est interprété et exécuté de manière synchrone, c’est-à-dire séquentiel-
lement et ligne à ligne par le navigateur.
99Une instruction JavaScript se termine par un point-virgule.
2.1 Les exemples de Hello World 15
var monH1=document.createElement("h1");
monH1.innerHTML="Hello World";
document.getElementById("monBody").appendChild(monH1);
</script>
</html>
Ici, le code HTML du fichier initial ne contient aucune balise h1. Il n’y a que la balise body
avec un identifiant qui nous permettra de la trouver facilement. Le script crée une variable
monH1 avec l’instruction var et lui affecte un nouvel élément HTML de type H1 grâce à
la fonction createElement(). La propriété innerHTML est ensuite renseignée. Puis la
16 Chapitre 2 Hello(s) World(s)
fonction appendChild() sur la balise body est appelée pour ajouter dans le document
l’objet HTML monH1.
Finalement, le document HTML contient grâce à nos trois petites lignes de JS un nouvel
élément h1.
Rassurez-vous, nous verrons toutes les manipulations des éléments HTML dans le chapitre 12.
Le rendu est différent car le message ne s’affiche pas dans la page mais dans une boîte
de dialogue gérée par le navigateur :
Une boîte de dialogue est dite modale, c’est-à-dire bloquante, car elle impose à l’utilisa-
teur une action pour qu’il puisse continuer sa navigation. Ici, il doit forcément valider le
message en cliquant sur le bouton OK. Nous verrons dans les paragraphes suivants que
les boîtes de dialogues ne sont pas fiables et sont à éviter pour les sites en ligne.
La fonction alert() est liée à l’objet racine window : on peut donc écrire window.
alert() ou alert() seulement.
<html>
<head>
<title>Hello World 5</title>
</head>
<body></body>
<script type="text/javascript">
var message="Hello World";
console.log(message);
</script>
</html>
Sous l’écran de rendu de la page HTML, la console s’ouvre et on voit apparaître le message
de bienvenue affiché avec console.log(). Log signifie « journal » en anglais. Il s’agit
d’un terme très utilisé en informatique, qui désigne un ensemble de données archivées,
généralement des informations techniques sur l’enchaînement d’opérations de traitements.
Notez que l’interface de la fenêtre de console est légèrement différente selon les naviga-
teurs. Mais les principales options sont toujours présentes.
La console est également le moyen idéal pour interagir avec la page en cours de consulta-
tion et les scripts associés. Tapez une instruction devant le curseur et la console l’exécutera
dans le contexte de la page actuelle et retournera son résultat. Dans le script hello5.html,
la variable message est renseignée. Vous pouvez aussi accéder au titre de la page avec la
notation document.title :
Attention, sur certains navigateurs très anciens, l’objet console n’est pas connu. Son usage
déclenche alors une erreur JavaScript et peut parfois interrompre le reste de vos scripts.
Nous utiliserons dans ce livre plusieurs fonctionnalités de l’objet console, en plus du très
classique affichage par log(). Reportez-vous au chapitre 9, page 145, pour la liste de
toutes les fonctions d’affichage de la console.
Le mode responsive mobile est d’une redoutable simplicité pour simuler des affichages
dans les principales résolutions d’écran d’iPhones et des divers smartphones et tablettes
du marché.
Cliquez sur le bouton représentant un smartphone pour entrer dans ce mode et choisissez
les devices disponibles pour contrôler l’affichage de votre site.
N’hésitez pas à explorer les options, les filtres et les différents affichages de la console : elle
regorge d’astuces pour gagner du temps et trouver rapidement une solution à une erreur.
Notons immédiatement que le temps où les robots et moteurs de recherche étaient incapables
de comprendre le JavaScript est largement révolu. Tous les robots sont désormais capables
de voir une page telle qu’un navigateur la présente à un véritable visiteur.
Nous aborderons plus en détail quelques recommandations issues de cet outil au pro-
chain chapitre dans le paragraphe qui traite de l’appel de fichiers JS externes.