Menu de navigation ouvert
Fermer les suggestions
Recherche
Recherche
fr
Change Language
Changer de langue
Importer
Se connecter
Se connecter
Téléchargez gratuitement pendant jours
100%
(6)
100% ont trouvé ce document utile (6 votes)
3K vues
361 pages
Dunod Tout Javascript
ce qu'il faut retenir de javascript
Transféré par
abdel fedala
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu,
signalez une atteinte au droit d’auteur ici
.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
Télécharger
Enregistrer
Enregistrer Dunod Tout Javascript pour plus tard
Partager
100%
100% ont trouvé ce document utile, undefined
0%
, undefined
Imprimer
Intégrer
Signaler
100%
(6)
100% ont trouvé ce document utile (6 votes)
3K vues
361 pages
Dunod Tout Javascript
ce qu'il faut retenir de javascript
Transféré par
abdel fedala
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu,
signalez une atteinte au droit d’auteur ici
.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
Élément précédent du carrousel
Élément suivant du carrousel
Télécharger
Enregistrer
Enregistrer Dunod Tout Javascript pour plus tard
Partager
100%
100% ont trouvé ce document utile, undefined
0%
, undefined
Imprimer
Intégrer
Signaler
Télécharger
Enregistrer Dunod Tout Javascript pour plus tard
Vous êtes sur la page 1
/ 361
Recherche
Plein écran
Olivier Hondermarck TOUT ogee og Sele ey ee 0 on JavaScript a ” javaScr lap Maitrisez les bases de la programmation JavaScript Démarrez avec les frameworks Nodes, React, Angular... Pratiquez avec le site ae | DUNODOlivier Hondermarck TOUT avascript Maitrisez les bases de la programmation JavaScript Démarrez avec les frameworks Nodejs, React, Angular... Pratiquez avec le site (SENET 4: Ge oO DUNODCréation graphique de la couverture : Hokus Pokus Créations ee ses eenieaemuitcentaembarceens tas Gack be cies oe Ken co cto tor errs go _ rom origin pnb par reprise por Foverir deer, ‘cles ovat de Pleat ee” ecibiomn) costes dea as co Seeder nat erppe dre tor, toss do Nov eppsone done qv ete Peccege & apes, pore uke, te Code del prot inl A> le présente. publication es tole ds 1™ ule 1992 inert |LEROLGE| inerdie sons corivoon de enol expenmert lo phooco- TMELELNRE) Four, de on teu ov do pled une clas ctor Carre bong felon {aon det eyo do Or, cme proive drot_de cope (CFC, 25, 10 des fot ginsclote Son le Gebel. Granbury, 7508 Pai © Dunod, 2019 (nouvelle présentation corrigée) 11 rue Paul Bert, 92240 Malakott www.dunod.com ISBN 978-2-10-080759-8 le Code de la propriéié intellacivelle nfautorisant, aux termes de article 122-5, 2° et 3° o), d'une part, que les « copies ou reproductions siclement réservées & usage privé du copiste et non destinges & une uilisation collective » «i, d'autre part, que les analyses et es courts citations dans un but d’exemple et diilustotion, « toute représentation ou reproduction intégrale ou poriellefoite sans le consentement de auteur ov de ses ayonts droit ou ayanis couse est Cette représenation ov reproduction, par quelque procédé que ce soit, constive- rait donc une conirefacon sanctionnée par les articles |. 3352 et suivants du Code de la propriéis intellectualAvant-propos Pourquoi un nouveau livre sur le JavaScript? Dix ans aprés mon premier ouvrage sur le JavaScript, paru chez Micro-Application, une totale réécriture était nécessaire. J'ai écrit ce livre avec une vision plus large que le simple apprentissage du JavaScript. J'ai voulu apporter au lecteur des principes qui seront utiles dans la programmation sur tous les langages. J'ai aussi ajouté des conseils sur les facteurs de succés d'un projet web. Aprés une expérience de plus de douze ans en tant que créateur et éditeur d'un site web leader dans sa thématique, j'ai voulu partager mes acquis en abordant les optimisations de performances, d'ergonomie et de référencement, jusqu’au modéle économique. © A quis‘adresse ce livre? Ce livre s‘adresse 8 tous les développeurs web, quils soient débutants ou avancés, en phase de formation a I'école, en auto-apprentissage par passion de la programmation ou en poste dans une entreprise du net Des connaissances préalables sur les langages HTML et CSS sont souhaitables. Un lecteur qui découvre la programmation aura intérét a lire cet ouvrage dans l'ordre et en intégralité, presque a image d'un roman. Lenchainement des chapitres est progressif et ponctué de remarques et de conseils adaptés a la vraie vie d'un projet web. Un développeur plus & I'aise avec le langage pourra se reporter & l'index, riche et varié, pour trouver directement les fonctionnalités du langage ou des notions plus générales qu'il souhaite approfondir ou découvrir. Dans tous les cas, les deux premiers chapitres seront instructifs pour tous les lecteurs, avec un point de vue sur la place du JavaScript dans un projet et des rappels sur les bons outils et les bonnes pratiques de programmation Les lecteurs experts observeront sans doute quelques simplifications par rapport a la terminologie officielle ; elles sont destinées a rendre les notions plus facilement compré- hensibles. La méthode 10g () de l'objet console sera par exemple présentée aussi comme une fonction. © Renvois vers le site toutjavascript.com Afin de rendre ce livre moins volumineux, et donc moins cher, j'ai adopté une écriture assez condensée, avec les captures d’écrans strictement nécessaires et des extraits de scripts limités a la partie essentielle. Des renvois vers les exemples complets sont proposés via des liens raccourcis au for mat tjs.ovh/nomSeript. Ces renvois, véritables compléments interactifs & ce guide, affichent ¥ le rendu de I'exécution du script; ¥ un émulateur de la console du navigateur;Avant-propos Y le code source complet de I'exemple avec une coloration syntaxique, des commen- taires et des liens vers les fiches de la référence JS de mon site toutjavascript.com. © Erratum Le page http:/www.toutjavascript.comiivre/erratum.php contient les éventuels errata relevés par les lecteurs. N’hésitez pas a y déposer vos remarques pour améliorer et com- pléter les informations publiées. Remerciements Je tiens a remercier les lecteurs de mon premier livre, sans qui cette version entigrement nouvelle n’aurait pas existe. Je remercie également mon éditeur, Jean-Luc Blane, chez Dunod, pour son professionna- lisme. Il a réussi a me comprendre et a me motiver. Sans la patience et les encouragements de Stephy, je n‘aurai jamais été au bout de ce long travail Merci a ma mere pour la relecture attentive du manuscrit. Mon chien, qui a supporté les longs mois d’écriture des deux livres, ne verra hélas pas aboutissement de cette version. Je profite également de cet espace un peu plus personnel pour exprimer ma gratitude en tant qu’entrepreneur du web a trois sociétés incontournables. Elles ont énormément participé & la démocratisation d'Intemet et donc a la réussite d'entreprises telles que la mienne Y Google, pour avoir rendu I'acc8s a |"information bien plus facile aux utilisateurs ; Y Free et son patron emblématique, Xavier Niel, pour avoir créé les forfaits illimités ADSL et Mobile a tarifs imbattables; ¥ OVH et son créateur, Octave Klaba, pour avoir offert des solutions d’hébergement fiables et tres abordables a tous les diffuseurs de contenus.Table des matiéres Avant-propos PREMIERE PARTIE Les bases de JavaScript [1(] Reflexions autour du JavaScript 1.1 JavaScript, c'est quoi? 1.2 Bréve histoire du JavaScript 1.3 Le standard ECMAScript. 1.4 Rappel sur le principe client/serveur 1.5 Les possibilités du JavaScript. 1.6 Limites et sécurités du JavaScript. 1.7. Impact sur les performances et le référencement. 1.8 Limage du JavaScript et son avenir 1.9 Place du JavaScript dans un projet web. [2] Hetio(s) Worta(s) 2.1 Les exemples de Hello World. 2.2 La console des navigateurs. 2.3 Uextension Web Developer. 2.4 Uoutil Google PageSpeed. 2.5 JavaScript non activé 2.6 Le bon éditeur de texte. 2.7 Programmer et partager du JS en ligne 2.8 Mettre un site en ligne. 2.9 Les bonnes pratiques ‘Structure d’un script. 3.1 Intégrer du JavaScript 3.2. Les variables, 3.3. Les blocs d'instructions. 3.4. Les tests conditionnels. 3.5. Les conditions 3.6 Les boucles. 3.7. Les fonctionsTable des matiéres Les chaines de caractéres en JavaScript. 4.1 Déclaration d'une chaine de caractares. 4.2 Concaténation de chaines. 4.3, Lobjet string 4.4 Le traitement des caracteres spéciaux 4.5. Exécuter une chaine JavaScript 4.6 Manipulations avancées avec les expressions réguliéres. (] Les mathématiques i 5.1 Les conversions de types de données 5.2 Lobjet Math 5.3 Les nombres aléatoires. 5.4 Laffichage formaté de nombres Manipulation de dates 6.41 Lobjet Date 62. Les minuteries 6.3. Laffichage formaté de dates. 7,] Les tableaux 7A Utilité des tableaux 7.2. Uobjet Array 7.3. Les tableaux spéciaux 7.4 La manipulation de tableaux. 8 | Programmation objet et JSON 8.1 Les principes de la programmation objet 8.2 Créer des objets JavaScript 8.3. Le format JSON 8.4 Résumé de la POO JavaScript Reintroduction au JavaScript 9.1 Les évolutions de structure du langage 9.2. Les évolutions sur les objets. 9.3 Comprendre un appel JavaScript. [9] Lobjet maitre window. 10.1 Lobjet window. 10.2 Manipulation des pop-up. 10.3 Manipulation des frames. 87 57 aL838s 73 73 7 79 81 81 85 86 89 89 90 105 105 108 118 123 127 127 130 130 135 135 143 144(© Duned— Tut ron ron street wt Table des matiéres DEUXIEME PARTIE Vinteractivité fry La programmation événementielle. 149 11.4 Programmation événementielle. 149 11.2 Le gestionnaire d’événements en détail 152 fra] Manipuler le document. 163 12.4 Le HTML dynamique. ‘ 163 12.2 Trowver les éléments du document. 164 12.3 Manipuler les éléments. 170 12.4 Créer de nouveaux éléments. 179 12.5 Le drag and drop. 185 12.6 La sélection de texte. 186 Les formulaires 193 13.1 Lobjet Form 193 13.2 Les éléments de formulaires. 197 13.3 Les contréles de saisie. 215 13.4 Les données c6té serveur 215 Les appels AJAX 219 14.1 Appels asynchrones. =» 219 14.2 Le traitement cbté serveur. 223 14.3 Les contraintes liées & AJAX 225 (i) La gestion des erreurs. 229 1.1 La détection d'une erreur. 229 15.2 objet Error. 231 Les cookies et l'objet Storage. 235 16.4 Les cookies 235 16.2 Le stockage de données locales. 240 16.3 Les différences entre cookie et l'objet storage. 241 La géolocalisation 243 174 Confidentialité et sécurité 243 17.2 Obtenir la position actuelle. 243 17.3 Obtenir les positions réguliérement 245 17.4 Les scripts de cartographie 245 18) Les notifications 247 18.1 Le principe des notifications. 247 18.2 Les notifications en JavaScript 248[Be] tebicldesimatiaced Le dessin et les canvas. 251 19.1 Lélément Canvas 251 19.2 Interactivités et animations 260 TROISIEME PARTIE Pour aller encore plus loin avec JavaScript 20] Monétisation et publicité 265 20.1 La monétisation. 265 20.2 La publicité 266 20.3 Les bloqueurs de publicité 267 21] Introduction a Nodes. 2n 21.1 Installation de Node js. 2n 21.2 Utilisation de Node.js en serveur web 275 21.3 Utilisation de npm. 277 21.4 Un serveur web Node.js prét a I'emploi 280 21.5 Node js et les WebSockets 286 2 Les langages dérivés du JavaScript 291 22.1 TypeScript 291 22.2 Babel 295 22.3 JSX 298 Bibliothéques et frameworks. 299 23.1 Frameworks. 299 23.2 jQuery 301 23.3 Prototype js. 308 23.4 React 308 23.5 Angular 314 23.6 Vanilla is 320 23.7 Quelques biliothéques JavaScript utiles 320 24] Les Web Workers 323 24.1 Principes des Web Workers 323 24,2 Un cas réel de Web Worker 326 3] Créer une extension de navigateur. 331 25.1 JavaScript dans un lien de la barre des favoris. 331 25.2 Créer une extension sur Google Chrome 333 (3) Créer des applications. 343 26.1 Création d'applications de bureau 343 26.2 Création d’applications mobiles 348Table des matiéres Annexe CSS. 349 Utilisation de FontAwesome 349 La pseudo-classe :hover. . 350 Les pseudo-classes ‘first-child et :last-child 350 Les pseudo-¢léments ::before et safter 351 Les boites flechées avec CSS. 352 Les animations CSS. 352 Les transformations CSS. 363 Index 355PREMIERE PARTIE Les bases de JavaScript Dee eC Saute eee Cree COR Ci Retr Ca Pe eit ee ke ca een Cite ea ee eer ee cae) POSSI as uk Cite REC eee eon TC Cee ice SCI et eect eta Sun nu near ea eran Me nice eer ec er Ry Rene Meo dae Cer ees ne mere ha ace? ECU cu ue aia CoRRA Réflexions autour du JavaScript PAE eer mu eC Ue CU Coe CULO ute) oe eee tie Ck en et Cee ane possibilités, ses limites et son avenir. —1.1 JAVASCRIPT, C’EST QUOI? 25 ans dhistoire et encore de l'avenir Le JavaScript est un langage de programmation sous forme de scripts, c’est-é-dire sans phase de compilation du code source vers un langage de plus bas niveau. Lexécution du script se fait directement par le navigateur a partir du code écrit par le développeur. Le JavaScript est également un langage événementiel, I’écoute de tous les événe- ments qui peuvent se produire, comme un clic ou une minuterie. A chaque événement intercepté, une action peut étre déclenchée. Le JavaScript est aussi un langage orienté objet. Il utilise la notation pointée pour accé- der aux propriétés et fonctionnalités. Chaque élément de la page est un objet de I'arbo- rescence de l'objet maftre window Le JavaScript est principalement employé dans les pages web pour les rendre interac- tives et dynamiques. II est maintenant tellement puissant et compatible avec l'ensemble des navigateurs modernes que de véritables applications au format web sont utilisées par des millions d'internautes et remplacent déja les traditionnels logiciels sous forme d’exécutables. Les interfaces en ligne des messageries, des cartographies, des éditeurs de texte ou méme de tableurs sont réalisées en JavaScript et n‘ont rien a envier a leurs homologues exécutables, Le JavaScript est également de plus en plus utilisé comme plateforme serveur pour rem- placer & la fois le serveur web (comme Apache, le plus utilisé a ce jour) et le langage de programmation serveur (comme PHP). Nous aborderons cette approche dans la troisiéme partie de ce guide avec introduction & Node,js.[4] chapitre 1 m Réflexions autour du JavaScript 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 a s‘imposer actuellement est un simple carré jaune, avec les lettres noires JS alignées en bas a droite. Logo du langage JavaScript JS —1.2 BREVE HISTOIRE DU JAVASCRIPT Brendan Eich, ingénieur informaticien ameéricain, a inventé le JavaScript en 1995 chez Netscape et I'a intégré dans le navigateur du méme nom. Brendan Eich participera égale- ment & la création de la fondation Mozilla AYrorigine, le nom du langage était LiveScript. Mais Netscape profite a cette époque de la notoriété grandissante de Java pour le renommer en JavaScript. Cet artifice marketing par ticuliérement malvenu entraine des confusions sur I'utiité du langage et, prés de 25 ans plus tard, porte encore préjudice au JavaScript et & tout son écosystéme. Devant le succes du langage et du navigateur Netscape, Microsoft développe de son coté le langage de script JScript et I'intagre en 1996 dans Internet Explorer 3. Un navigateur est un logiciel de navigation sur 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é a partir de 1997 par ‘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 premiere 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 bugs. 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 I'organisation, comme Google, Apple ou Microsoft, sont également de féroces concurrents au quotidien1.3 Le standard ECMAScript Voici un tableau récapitulatif des différentes éditions d’ ECMAScript: ye 1 Premier standard 2 Corrections 3 Améliorations (String, Error, Number...) 4 Abandonnée —Aucun accord entre les membres 5 2009 Support natif du format JSON 60u2015 2015 eee na qui font du JavaScript un vrai Tou 2016 2016 Itération annuelle 8 ou 2017 2018 Itération annuelle 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 |'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. 1999 peut étre considérée comme l'année de la véritable démocratisation de l'accés Internet en France avec la création de la société Free et sa premiere offre d’accés par modem RTC. En 2009 est sorti I'iPhone 3GS. II est déja la troisiéme itération du premier iPhone, sorti en 2007, En dix ans, nous sommes passés d’un Internet lent, facturé la minute, visible sur des moniteurs cathodiques, au smartphone tactile en 3G, sans qu’aucune norme du langage JavaScript ne soit publiée. II n'y a rien d'étonnant a ce que chaque éditeur ait pris sans at- tendre des décisions pour adapter son navigateur aux évolutions technologiques. Chaque navigateur a donc développé des fonctionnalités et des rendus qui ui é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, Ila fallu encore six ans pour arriver ala version ES6, appelée aussi ES20'5, et parvenir a une spécification du langage compléte et modeme, qui peut étre considérée comme entiére- ment disponible dans la demiére version a jour de l'ensemble des navigateurs du marché. La version ES6 a défini de nowvelles formes de notations qui nécessitent un chapitre entier de remise a niveau pour les développeurs web habitués a la syntaxe plus classique (voir chapitre 9, page 127). Pour éviter de nouveaux délais aussi longs et des changements aussi radicaux apres chaque publication, il a été décidé que les éditions suivantes seraient moins ambitieuses et adoptereient le principe d’itérations réguliéres et annuelles, plus faciles @ définir et & implémenter.[2] chapitre 1 m Reflexions autour du JavaScript —1.4 RAPPEL SUR LE PRINCIPE CLIENT/SERVEUR Pour bien comprendre le r6le et l'emploi du JavaScript, il est indispensable de mattriser parfaitement le principe de fonctionnement en client/serveur d'une page web visualisée par un intermaute dans son navigateur. Lanelogie avec le serveur et son client dans le cadre d'un café est assez juste. Le client commande au serveur un expresso serré. Le ser veur prépare la tasse, la pose sur son plateau avec une sucrette, une cuillére et un verre d'eau. Et enfin, il dépose l'ensemble de la commande sur la table du client. Dans le cas d'une page web, le client est le navigateur de I'internaute. Le serveur est ensemble de l'architecture informatique hébergée dans un ou plusieurs datacenters de la société éditrice du site Internet. Le navigateur demande par exemple au serveur de son réseau social favori de lui afficher sa page d'accueil. Le serveur construit la page adaptée a son client, avec les actualités de ses amis et ses derniers messages. Le serveur web envoie le code HTML de la page préparée, les images et les autres ressources associées vers le navigateur qui 'interpréte et l'affiche a l'utilisateur. Bien sQr, la comparaison avec une commande de boisson est simpliste. La communica- tion entre le navigateur et le serveur est bien plus codifiée et nécessite l'utilisation stricte du protocole HTTP (HyperText Transfer Protocol) indiqué devant les adresses dans la barre de navigation du browser. Voici un schéma des communications entre le navigateur et le serveur lors de la demande de la page d'accueil d'un site 1a de communication client/serveur Laffichage d'une page se réalise en sept grandes étapes Le navigateur envoie une requéte HTTP au serveur de google. fr. Le serveur fabrique le code HTML de la page demandée et le compresse. Le serveur envoie le code HTML dans une réponse @ la requéte HTTP du navigateur. Le navigateur regoit en réponse le code HTML et le décompresse. aon Le navigateur interpréte le code HTML ligne par ligne et commence |'affichage de la page.© Ounad Tote prodcton nan ate 1.5 Les possibilités du JavaScript 6. Le navigateur envoie de nouvelles requétes vers le serveur pour chacun des éléments a charger (images, styles, scripts). 7, Le rendu de la page est terminé. Tous les objets connectés a Internet communiquent entre eux grace @ leur adresse IP une suite de quatre nombres variant de 0 a 255. Les humains sont plus @ I'aise avec les mots qu‘avec les chiffres: c’est le protocole DNS (Domain Name System) qui traduit les noms de domaine en leur adresse IP. Le navigateur fait ainsi appel aux serveurs DNS du fournis- seur d’accés pour trouver I'adresse IP du serveur de la page demandée. La compression GZIP des données transportées sur le réseau par le protocole HTTP opti- mise les temps de rendu, car le temps gagné pour le transfert sur le réseau est largement supérieur aux temps de traitements de compression sur le serveur et de décompression par le navigateur. Le protocole HTTP/2 est une nouvelle version majeure encore peu utilisée du protocole HTTP destinée a 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 complete. Nous verrons a plusieurs reprises dans ce livre les implications concrétes sur le dévelop- pement web des différentes phases de communication entre les cOtés client et serveur. 1.5 LES POSSIBILITES DU JAVASCRIPT Le JavaScript utilisé o6té client et exécuté par le navigateur dans une page web est parfai- tement adapté pour les traitements suivants: Y Assistance de saisie des formulaires * Contréle et validation de seisie * Affichage de messages d'aide & la saisie * Editeur de texte enrichi ¥ Sauvegarde de données sur le poste local * Via les cookies * Via une zone disque dédiée Y Gestion des nombres, dates et heures * Calculs mathématiques * Calculs sur les dates * Affichage dans le format du pays de l'utilisateur ¥ Animations graphiques ‘* Menus et éléments de navigation * Animations esthétiques Défilements, diaporamas, zooms Graphiques animés et interactifs Cartographies © JeuxChapitre 1m Réflexions autour du JavaScript ¥ Appels asynchrones vers le serveur pour actualiser la page * Cours de Bourse * Chat de messagerie Alerte en direct Sauvegarde de saisie automatique en temps réel Affichage de services externes * Liste des posts d'un réseau social * Mesure d'audience * Campagne publicitaire lin'existe aucun autre langage intégré aux navigateurs qui soit aussi puissant et universel- lement reconnu que le JavaScript pour tous ces traitements. Si le programmeur logiciel a I'habitude d’avoir une vaste gamme de langages a choisir selon ses habitudes ou ses besoins, en revanche, le JavaScript n’a pas dalternative | Le JavaScript utilisé c6té serveur n’a pas du tout la méme finalité. Il est capable de remplir l'ensemble des fonctionnalités d'un langage serveur classique comme PHP ASR Python, C, Java... De plus en plus de sites sont développés en JavaScript cété serveur: forums, outils de statistiques, interfaces d’administration —1.6 LIMITES ET SECURITES DU JAVASCRIPT Le JavaScript, et les navigateurs qui I’exécutent, ont évolué avec les menaces apparais- sant progressivement sur le web. Au début, certains développeurs JavaScript abusaient des pop-up, qui ont été rapidement bloqués par les navigateurs. Des scripts perturba- teurs tentaient de faire planter le navigateur en langant des traitements lourds et infinis. Récemment, des scripts parasites de création de crypto-monnaies (minage) sont apparus pour voler de la puissance processeur aux utilisateurs. A chaque fois, les éditeurs de navigateurs ont intégré des parades, en anticipant la future innovation malveillante et en préparant la parade La sécurité sur le net est devenue un enjeu vital. Via un programme de Bug Bounty, tous les acteurs du web offrent des récompenses, allant jusqu’a plusieurs dizaines de milliers de dollars, aux chercheurs qui découvrent des failles de sécurité dans leurs logiciels. Le JavaScript, étant exécuté localement a |'intérieur d'un navigateur qui sécurise son usage, a de nombreuses limites fonctionnelles ll n'est pas possible, sans une action volontaire supplémentaire de l'utilisateur ¥ un site d'accéder au disque dur de l'utilisateur (hormis une zone strictement réser vée au stockage de données site par site) ; ¥ Aun site d’accéder a la zone de stockage ou aux cookies d’un autre site; ¥ un site de lire I'historique de navigation, les mots de passe ou les favoris de |utili sateur; ¥ un virus ou un logiciel espion de ‘installer ou d'effacer des fichiers; ¥ un script de faire planter le navigateur, et encore moins le poste complet; ¥ aunscript d’abimer ou de détruire le matériel de l'utilisateur.5 i i i } i ? 1.7 Impact sur les performances et le référencement II faut bien prendre conscience que la sécurité du JavaScript et des navigateurs est garantie uniquement en I'absence d'action volontaire de l'utilisateur. Un script ne peut pas installer un logiciel sans I'affichage d'un message d'avertissement, prévenant de son intention. Mais si le visiteur clique et confirme sans lire le message, le logiciel s‘installera, avec des consé- quences potentiellement dramatiques, car un logiciel installé posséde tous les droits d'accés l'ensemble de l'appareil et du réseau. Le plus souvent, ‘objectif des créateurs de scripts et logiciels malveillants est de gagner de I'argent. Par exemple, les ransomwares, littéralement «logiciels de rangon», chiffrent le contenu du disque dur et interdisent l'accés aux docu- ments en espérant que l'utilisateur paiera une rangon 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 « hameconnage », 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 a utilisateur d’étre attentif sur ce qu'il fit et sur quel site il le fait. Le JavaScript ne permet pas non plus d’obtenir I'adresse IP de Iutilisateur. Les limites imposées par le langage et se bonne sécurité font partie des raisons qui ont permis son universalité qui le rendent incontournable. Le JavaScript est un langage de script intégré au code HTML de la page web. II 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 difficilernent compréhensible par un humain, en le compactant au maximum et en changeant entre autres le nom des fonctions et des variables. Mais Iessence du code est toujours présente et un travail de reverse engineering, opération inverse a I'obfuscation, est relativement simple a réaliser sur un script. Notez que le code JavaScript c6té 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 1.7 IMPACT SUR LES PERFORMANCES ET LE REFERENCEMENT | peut parattre étrange d’aborder dés le chapitre diintroduction des notions aussi éloi- gnées de la programmation JavaScript que le taux de rebond ou le référencement. Le succés d'un site web se construit a toutes les étapes de sa vie, depuis sa conception, sa réalisation et jusqu’a son exploitation Le JavaScript a un impact trés important sur le temps de chargement et de rendu de la page dans le navigateur. Pour un résultat final totalement identique, des optimisations simples permettent de gagner jusqu’a une seconde, voire davantage, pour un site particu- ligrement mal configuré au départ. Comme le JavaScript joue un rdle central dans I'ergonomie d'un service web, le déve- loppeur doit I'utiliser de maniére pertinente, dans le but de rendre service aux utilisateurs. Un site peu intuitif ou trop lent fait fuir ses visiteurs des les premiéres secondes. La part de visiteurs qui ne consulte qu'une page en moins de quelques secondes est appelée ‘taux de rebondChapitre 1 m Réflexions autour du JavaScript Les temps de chargement et le taux de rebond sont des indicateurs officiellement reconnus des moteurs de recherche et influencent le référencement d'une page. Le moteur de recherche s‘appuie sur ces critéres, parmi des centaines d'autres, pour privi- légier les sites apportant une réponse satisfaisante aux utilisateurs. N’oublions pas que les moteurs de recherche se livrent aussi entre eux une concurrence sévére sur un mar ché mondial a plusieurs dizaines de milliards de dollars annuels. Leur objectif est sim- plement de donner les meilleurs résultats pour satisfaire et fidéliser leurs utilisateurs. Dans le présent paragraphe, il s‘agit simplement d’alerter sur les enjeux et les impacts d'un simple bout de JavaScript, non seulement pour la partie code source, mais aussi sur son résultat. Nous aborderons dans le chapitre 2 les bonnes pratiques, les outils dispo- nibles et la vision d’ensemble a ne pas perdre de vue dans le cadre d'un projet web. —1.8 LIMAGE DU JAVASCRIPT ET SON AVENIR Il faut bien I'admettre, le JavaScript, et ses développeurs, ont une bien piétre image de marque. Le grand public le confond immanquablement avec Java et lui associe son cor tege de failles de sécurité et de mises & jour laborieuses. Les informaticiens, au sens large, voient en lui un langage ancien, sans grand intérét et dépassé, tout juste capable de 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 totale ment 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 4 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 chepitre 9 est dédié a 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égulirement maintenu par une organisation puissante. Il est utilisé, sans quiils le sachent, par 4 miliards d’inter- nautes dans le monde, selon des estimations de 2018’. II est au coeur du modéle écono- mique publicitaire du web. En I'absence de langage alternati, il est donc incontournable. Difficile dimaginer, sans une révolution compléte de l'accas au web, que le JavaScript ne poursuive pas sa croissance aux niveaux usage, compatibilité et fonctionnalités. —1.9 PLACE DU JAVASCRIPT DANS UN PROJET WEB Une belle quipe de ninjas du JavaScript est probablement en place pour créer et main- tenir interface d'un projet impressionnant comme Excel Online, version quasi conforme Excel, mais sur le web. ambition de ce livre n'est pas de faire de vous un ninja du JS mais de vous donner une vision compléte du langage pour vous amener a I'employer du mieux possible, au service de vos utilisateurs. Le but est également d’élargir votre regard 1. Estimations 'internet World Stats.1.9 Place du JavaScript dans un projet web sur d'autres aspects moins liés & la stricte programmation, comme I'optimisation des performances, de l'ergonomie, du référencement ou de la rentabilité. Soyons pourtant humbles et réalistes. Si le JavaScript est au coeur de I'ergonomie d'un projet web, il n’en demeure pas moins une toute petite partie d'un ensemble plus vaste regroupant de nombreuses compétences indispensables a son succes. Des métiers trés divers interviennent au quotidien: graphiste, architecte réseau, rédacteur, modérateur, community manager, référenceur, commercial, logisticien, etc. Le développeur web, rare- ment percu @ la juste mesure de son importance, r’est toutefois qu'un des rouages de équipe,Hello(s) World(s) Dans ce chapitre, nous allons immédiatement démarrer la programmation JavaScript via quelques exemples simples et progressifs. Nous mettrons en Pesca Ck Cu ncn OC Cau Cee aC renee a eukst Sac ee euec crs —2.1 LES EXEMPLES DE HELLO WORLD 2.1.1 Hello World numéro 1 Rien ne vaut I'incontournable exemple Hello World, gu’on pourrait traduire par « Salut tout le monde », pour comprendre un langage et démarrer son utilisation, et le doux frisson de satisfaction quand le fameux message apparait pour la premiére fois a I'écran. Pour programmer du code JavaScript et I'exécuter, il n'y a rien installer. Tout est déja présent sur votre poste de travail. Pour ce premier exemple, vous avez simplement be- soin d'un éditeur de texte, comme |'application Bloc-notes de Windows ou |'éditeur de texte sous macOS, et bien sir d’un navigateur. Nous verrons plus loin dans ce chapitre comment optimiser votre environnement de travail et utiliser tous les meilleurs outils disponibles. Dans |'explorateur de fichiers, choisissez un répertoire de travail, appelé par exemple Documents/JavaSeript. Créez dans ce dossier un nouveau fichier au format texte et renommeze en hello1.html, Avec un clic droit sur ce fichier, lancez l'éditeur de texte. Nous avons un fichier vide prét 8 étre rempli de notre premier exemple minimaliste
Hello World 1
Chapitre 2 m Hello(s) World(s)
Lancez l'exécution de hello1.html en double-cliquant sur le fichier dans I'explorateur de fichiers. Le navigateur par défaut s'ouvre et interpréte le code HTML, exécute la ligne de JavaScript et affiche le rendu. o7¢e@ | Hello Word | | | Le résultat équivalent en HTML est exactement ce qu’on attend
Hello World 1
iello World
Ce premier exemple trés simple est finalement riche d’enseignements. Il nous apprend que Y Le code JavaScript est intégré au code HTML classique d'une page web. Y Le JavaScript est placé dans le bloc marqué par les balises . ¥ Le JavaScript utilise la notation pointée window.document.write() pour appe- ler la fonction write () de l'objet document, lui-méme rattaché a l'objet racine window. Y Le JavaScript est interprété et exécuté de manidre synchrone, c'est-é-dire séquentiel- lement et ligne a ligne par le navigateur. ¥ Une instruction JavaScript se termine par un point-virgule. 2.1.2 Hello World numéro 2 Lexemple hello1.html affichait du texte dans le corps du HTML, alors que la page n’était pas encore finalisée. Lexemple hello2.html fonctionne différemment, car le script repére la balise #1 avec son identifiant et lui affecte un nouveau contenu© Danod Tote eprodcton non ata un dt. 2.1 Les exemples de Hello World
Hello World 1
Le résultat est exactement équivalent. A I'issue de I’exécution, la balise h1 contient bien Hello World, La syntaxe est un peu plus complexe, tout en restant d'une compacité appréciable. Ici, la fonction getElement ByTd () recherche et retourne I'élément HTML ayant l'identifiant monHi1 dans le document. La propriété innerHTML de I'élément trou- V6 est forcée avec notre message habituel. Nous verrons en détail dans le chapitre 12 toutes les manipulations des éléments du document. Nous aurions da écrire window.document .getElementById() mais, pour des rai- sons de lisibilité et de compacité du code, l'objet racine window peut étre ignoré. Comme dans hello1.html, document.write () serait suffisant. 2.1.3 Hello World numéro 3 Voyons encore une autre fagon d’afficher notre message de bienvenue dans hello3.htm!:
Hello World 3
Ici, le code HTML du fichier initial ne contient aucune balise h1. II n'y a que la balise body avec un identtfiant qui nous permettra de la trouver facilement. Le script crée une variable monH1 avec I'instruction var et lui affecte un nouvel élément HTML de type H11 grace & la fonction createElement (). La propriété innerHTML est ensuite renseignée. Puis la fonction appendChilld () surla balise body est appelée pour ajouter dans le document objet HTML monli1 Finalement, le document HTML contient grace a nos trois petites lignes de JS un nouvel élément hl. Rassurez-vous, nous verrons toutes les manipulations des éléments HTML dans le chapitre 12. taChapitre 2 m Hello(s) World(s) 2.1.4 Hello World numéro 4 Les possibilités d'afficher notre message de bienvenue par programmation JavaScript ne sont pas encore épuisées. Voici un nouvel exemple d'affichage de message par boite de dialogue
ello World 4
Le rendu est différent car le message ne s'affiche pas dans la page mais dans une boite de dialogue gérée par le navigateur ©) > XX @ © Mleypusers/olivir/toudsivee © fr (Q Rechercher |» Une boite de dialogue est dite modale, c’est-8-dire bloquante, car elle impose @ I'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 boites de dialogues ne sont pas fiables et sont a éviter pour les sites en ligne. La fonction alert () est liée a l'objet racine window: on peut done écrire window. alert () oualert () seulement. 2.1.5 Hello World numéro 5 Voyons maintenant un dernier exemple d’affichage de notre message de bienvenue dans le fichier hello5. htm:
tello World 5
A l'exécution, la page reste totalement blanche. Pourtant la fonction 1og() de l'objet console a bien affiché le contenu de la variable mes sage. Voyons maintenant pourquoi ‘et comment utiliser la console des navigateurs. —2.2 LA CONSOLE DES NAVIGATEURS Tous les navigateurs modernes proposent aux développeurs web des outils d'aide & la programmation et au débogage. On parle souvent de «console JavaScript» mais la console est en fait bien plus puissante et s'appelle la plupart du temps « Outils de déve- loppement ». Son usage est bien sr réservé aux phases de programmation et la console rest pas affichée pour le visiteur lambda. Une combinaison de touches suffit pour faire apparaitre la console. Selon les navigateurs et le systéme d’exploitation, la combinaison varie. Voici les cas les plus frequents ¥ Pour Chrome sur macOS: $8 + ~ + J. ¥ Pour Safari sur macOS: $8 + © + C. ¥ Pour Chrome, Firefox et Safari sur Windows: CTRL + MAJ + I. Y Pour Internet Explorer et Edge: F12. Reprenons notre fichier helloS.html, exécuté ici dans Chrome sous Mac et observons ce que la console affiche: Deemer ; © 0 Redveiaiarccie- 01earoPete tk atte Worls ‘alles? ‘Sous I'écran de rendu de la page HTML, la console s‘ouvre et on voit apparaitre le mes- ‘sage de bienvenue affiché avec console. 1og(). Log signifie «journal» en anglais. II s'agit d'un terme trés utilisé en informatique, qui désigne un ensemble de données a chivées, généralement des informations techniques sur I'enchainement d’opérations de traitements. Notez que linterface de la fenétre de console est légérement différente selon les naviga- teurs. Mais les principales options sont toujours présentes.Chapitre 2 m Helio(s) World(s) 2.2.1 La console JavaScript La console JavaScript affiche par défaut l'ensemble des erreurs graves détectées dans la page, qu'il s‘agisse d'une erreur de script, comme ici une variable non définie, ou d'une erreur d’accés a des ressources sur Internet, comme une image introuvable GR El | Gements Corsow Souces Network Perfomance Memory Appicaton Security Aude ez x BO | 7 iter etait owls ¥ © Group sar a (© runcaught Referenceérror: mag 1 not defined ‘consolel.atalit ‘st consolatshinisa8 (© Ger fhLe:///users/oliviee/cloud/Livee=js-2018/esenn\es/incona, ing net::ERA_FILE MOT FOUND ‘console html 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 I'exécutera dans le contexte de la page actuelle et retournera son résultat. Dans le script helloS.html, la variable message est renseignée. Vous pouvez aussi accéder au titre de la page avec la notation document ..title elle world elles na > message 6 Helo Werte > docanenttitle Cette Worta §* >I Lobjet console accessible en JavaScript permet d’afficher des informations en cours d'exécution dans le journal de log, dans un format lisible et tout en restant parfaitement invisible aux visiteurs. C'est trés utile pour contréler la valeur de données en cours d'utili- sation et pour vérifier que le comportement réel est bien celui prévu ‘Avant la généralisation de la console dans les navigateurs, les développeurs JavaScript avaient pris la mawvaise habitude d'utilser la fonction alert () pour afficher le contenu d'une va- riable. Il faut bannir cet usage: il bioque la navigation, affiche le message & tous les visiteurs et ne peut contenir que du texte brut. De plus, le message est parfois bloqué par les navigateurs. Explorons plus en détail les possibilités de la console JavaScript et ses options. En cliquant sur le bouton représentant un cercle barré ou parfois une poubelle, vous videz la zone datfichage En cliquant sur le bouton représentant une roue dentée d’engrenage, vous ouvrez la fe- nétre de paramétrages de la console. Vous pouvez par exemple ajouter un horodatage,{© Dunod Tote production non ue et on 2.2 La console des navigateurs timestamp en anglais, devant les lignes affichées ou supprimer I'affichage des erreurs réseaux comme les images introuvables pour vous concentrer sur la partie script. Nous utiiserons dans ce livre plusieurs fonctionnalités de l'objet console, en plus du trés classique affichage par 10g (). Reportez-vous a I'index en fin de livre pour les autres cas diusage. 2.2.2 Les autres outils de la console Linspecteur d’éléments se lance avec le bouton représentant une fléche sur un carré. Il permet de retrouver, dans I'arborescence des éléments du document, le code HTML correspondant. Par exemple, sur la balise h1 d'un script initial: 2.2.3 Les performances réseaux Longlet Network affiche I'enchainement des appels réseaux des différentes ressources que la page charge en cours de construction. Une représentation graphique complete montre les éventuels points qui ralentissent le rendu de la page par des temps d'accés anormalement longs ou des poids trop importants. Cet onglet permet aussi de limiter attificiellement les débits réseaux en simulant des accas lents en 2G ou 3G. 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 contrdler I'affichage de votre site. N’hésitez pas 4 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.Chapitre 2 m Hello(s) World(s) —2.3 LEXTENSION WEB DEVELOPER extension Web Developer est gratuite et existe depuis le milieu des années 2000. Elle est utilisée par des millions de développeurs web dans le monde entier. |! s’agit d'un plu- gin installable sur les navigateurs comme Chrome, Firefox et Opera et qui se place sous la forme d'une icdne d’engrenage a coté de la barre de navigation. En cliquant sur Iicdne, vous ouvrez une fenétre qui comprend de nombreux onglets cor respondant a différents groupes de fonctionnalités. Impossible de les lister toutes. Notez quelques fonctionnalités particuliérement utiles pour surligner les éléments dans la page selon leur type, visualiser l'ensemble des éléments d'un formulaire, des cookies actifs ou pour supprimer le cache du navigateur: Outing AbsonitePostoned Elements tine Stock Lave Elorarts | cine depreceted Elements ine Exteel Links | cxaine Foxe Poaoned manta 2 ine Floated Elements ‘Outne Table Captions Outine Fares Outing Table Cll Ouatine Headings utne Tables Outine Non Secure Elements ‘Show Element Tag Names ain Relative Positioned Elements Pour I'installer, rendez-vous sur le site de son auteur: https://chrispederick.com/work/web- developer/. —2.4 LOUTIL GOOGLE PAGESPEED Abordons dés maintenant l‘outil PageSpeed Insights proposé par Google. II mesure les performances de rapidité de chargement d'une page web, lui attribue un score sur 100 et propose des recommandations pour améliorer le score, a la fois sur mobile et sur ordinateur. de comprendre le de voir une page telle ‘un navigateur la présente un véritable visiteur. sna robots et moteurs de recherche étaient incapables est Irgement révolu. Tous les robots sont désormais capables 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. —2.5 JAVASCRIPT NON ACTIVE Lextension Web Developer permet, parmi de multiples fonctionnalités, de désactiver sim- plement I'exécution du JavaScript. Cliquez sur Disable JavaScript dans le premier onglet pour désactiver toute interprétation de code JavaScript dans le navigateur. Doane coones 705s roms images @hiomaton MMcotneoss /owine fresze Koos iBlopters 1% Disab taaScrint Disable Pugin Disable Notifications 7 Daable Popups JavaScript has been disabled. eset Disable Features2.5 JavaScript non activé Aujourd'hui, il semble inconcevable de naviguer sur le web sans avoir activé JavaScript. Pour autant, il peut arriver de tomber sur des visiteurs qui n’acceptent pas les scripts, pour toutes sortes de raisons (refus d’étre suivi, crainte des virus, faible configuration maté- fielle). Nous ne pouvons naturellement pas forcer |activation du JavaScript, mais nous pouvons les informer de la situation grace la balise noscript
Script et NoScript
document .write ("
Hello World
"
Votre navigateur n'accepte pas le Javascript.
La navigation sur ce site sera impossible !
Si le JavaScript est activé, le bloc HTML entre
et
est sim- plement ignoré. Si le JavaScript est désactiv, le bloc HTML est affiché es eo ¢e © fle//Maciome/Documentslis. vB ¥| | Q Rechercher no Votre navigateurn'acepte pa le JavaScript La mavigation sur ce site sera impossible ! La plupart des sites faisant fortement appel au JavaScript utilisent cette technique pour informer leurs utilisateurs de la nécessité d’activer les scripts. Facebook affiche un message du méme type et propose en plus une version légare de son interface qui n'utilise pas le JavaScript JavaScript requis Nous sommes désolés, mals Facebook ne fonctionne pas corectement Sans JavaScript. Si vous ne pouvez pas activer JavaScript, rendez-vous sur mobile-optimized website. pecanChapitre 2 m Hello(s) World(s) —2.6 LE BON EDITEUR DE TEXTE Le bloc-notes est un out! vraiment minimaliste pour développer. II existe des éditeurs de texte nettement plus adaptés pour travailler sur des fichiers plus lourds. La fonctionnalité minimale est la coloration syntaxique. Léditeur ne se contente pas d'affi- cher le texte en noir et blane, il colorise les différentes parties selon leur nature et leur usage. Les commentaires, les chaines de caracteres, les fonctions natives, etc. sont im- médiatement repérés par une mise en forme dédiée. La complétion automatique est également utile. Léditeur de texte anticipe ce que vous tapez et propose en cours de frappe les possibilités de code. Par exemple si vous commencez a taper getElement, le logiciel proposera de finir la frappe par toutes les fonctions possibles comme getElementById, getElement sByTagNane, etc. De nombreux éditeurs de textes adaptés existent. Citons NotePad++, Editplus, Sublime Text ou Coda uniquement sous macOS. La plupart apportent des fonctionnalités de ges- tion d'historiques de fichiers et de transfert par FTP des fichiers mis a jour vers I'hébergeur de votre site. Certains logiciels sont gratuits et d'autres cotitent généralement quelques dizaines d’euros. Enfin, il existe des logiciels qui gérent votre environnement complet dans des interfaces intégrées, aussi bien sur la partie langage serveur de type PHP que la partie base de don- nées SQL et bien sir la partie HTML, CSS et JS. Ces logiciels sont capables d’interpréter ensemble de votre projet, pendant la phase de codage. La compiétion automatique ne se contente pas des fonctions natives du langage, mais ajoute les fonctions, les variables et les propriétés de votre projet. D’autres fonctionnalités d’audit de code, comme la détec- tion de code mort, c'esta-dire des portions de code qui ne peuvent jamais s'exécuter, sont souvent proposées. Ces logiciels dépassent le plus souvent la centaine d'euros, aprés une période d’essai gratuite 2.7 PROGRAMMER ET PARTAGER DU JS EN LIGNE Le partage de code entre développeurs a toujours été contraignant, en particulier sur les forums. Des outils en ligne sont donc apparus pour simplifier cette tache, y compris pour le cas assez complexe de pages web complétes ayant du code HTML, du code CSS, du code JavaScript et réguliérement des scripts externes. lls permettent d’enregistrer les différentes parties HTML, CSS et JS, de les sauvegarder dans le cloud, d’avoir le rendu en temps réel et de partager l'ensemble avec un simple lien, publiable facilement dans un forum ou dans un mail, sans avoir ajouter de fichiers joints ou de copiercoller d'extraits de codes. Parmi les plus connus, citons https://codepen.io/pen, http://isbin.com ou https://isfiddle.net. Ces outils sont généralement gratuits pour un usage basique, suffisant pour un simple partage sur un forum par exemple. Ils deviennent payants sous forme d’abonnement pour un usage plus pointu avec sauvegarde de scripts et partages privés.2.8 Mettre un site en ligne —2.8 METTRE UN SITE EN LIGNE Dans la plupart des cas, il n'y a pas de différences de résultats entre une page HTML. ‘exécutée en local, c’est-a-dire depuis le disque dur du poste de travail, et une page exécu- tée depuis un site Internet. Une page HTML exécutée directement depuis le disque dur utilise le protocole file://, visible dans la barre de navigation au lieu du protocole classique http(s Dans certains cas, avec le protocole file://, des systémes de sécurité du navigateur li- mitent les possibilités d'interactions. De plus, en local, tous les effets liés aux éventuels ‘temps de chargements sont invisibles. I est donc intéressant de tester ses développements dans les conditions les plus proches de la réalité de ‘utilisateur final. Un développeur travaille généralement sur différents environnements. Lenvironnement de test unitaire lui est dédié. environnement de recette, ou de préproduction, est des- tiné & partager I'ensemble des développements validés de I'équipe pour une phase de validation. Une fois validés, les développements passent sur l'environnement de produc- tion, c'est-é-dire le site réel. —2.9 LES BONNES PRATIQUES Avant de progresser dans la maftrise du JavaScript, terminons ce chapitre par un rappel des bonnes pratiques adopter, valables quel que soit le langage utilisé, pour un dévelop- pement amateur personnel ou un projet de plus grande envergure. 2.9.1 Indentation indentation est la mise en forme qui utilise des espacements ou des tabulations en début de ligne afin de regrouper des éléments de méme niveau de profondeur dans un code. indentation permet d’un seul coup d'ceil d'identifier la profondeur d'un groupe d'instructions. Elle s'applique dans tous les langages. Pour le développeur web, elle s'ap- plique done aux codes HTML, CSS et JS. Prenons I'exemple de deux codes identiques qui met en évidence I'intérét de l'indenta- tion. La version sans indentation aligne toutes les instructions sur le c6té gauche if (heure<18) { msg="Bonjour"; style="jour"; ) else ( nsg="Bonsoir"; style="nuit™; )Chapitre 2 @ Hello(s) World(s) La version correctement indentée identifie clairement les blocs d’instructions selon les résultats du test if: if (heure
var msg="Hello World”, // Commentaize aprés une instruction(© Danes — Tost eprchction ran aut et i 2.9 Les bonnes pratiques // Conmentaire sur toute une ligne 6 Ligne 1 de commentaire Ligne 2 Ligne 3 ” Un commentaire pertinent ne doit pas répéter ce que le code dit déja de maniére évi- dente. Le commentaire /* Boucle sur le tableau */ est parfaitement inutile. En revanche, rappeler en quelques mots ce que fait la boucle et son but doit permettre de comprendre I'esprit du code plus rapidement que par I'analyse de l'ensemble des lignes concernées. Les commentaires sont utilisés également pour signer son code pour toute sa durée de vie. Cette signature est engageante sur la qualité et la lisibilité de ce que le développeur produit et met a disposition. Uhabitude veut que chaque fichier d'un projet débute par une courte introduction sous forme de commentaires indiquant le but du fichier, sa version, l'auteur, les travaux en cours... Il peut aussi étre judicieux d'utiliser les commentaires pour signaler les grandes parties d'un traitement ou d'un fichier. 2.9.5 Réutilisabilité La magie de l'informatique est qu'elle permet de réutiiser trés facilement une fonctionna- lité déja écrite une fois par vous-méme ou par un développeur qui partage ses créations sur le net. Dans le chapitre suivant, nous verrons comment, avec la création de fonctions et de fichiers du type ,js. Cela implique un peu de travail et d'organisation et trop souvent la solution de facilité est de simplement copiercoller le bout de code a chaque fois qu'il faut le réutiliser. Rapidement, des doublons apparaissent, alourdissant le poids total du code et rendant fastidieuse la maintenance : au lieu de corriger la fonctionnalité une fois pour toutes, il faut identifier les différents endroits oi elle est utilisée et appliquer autant de correctifs. 2.9.6 Cohérence La lisibilité est également renforcée par une cohérence dans la fagon de programmer et de nommer ses fichiers, ses fonctions et ses variables. II n'y a pas vraiment de bonnes ‘ou de mauvaises régles. Le plus important est de garder une cohérence tout au long d'un projet.Chapitre 2 m Hello(s) World(s) Le plus difficile est sans aucun doute d’assurer la cohérence dans le cas d'un travail & plu- sieurs personnes ayant des parcours divers. Le choix des régles est souvent imposé par un historique ou par un pouvoir hiérarchique, méme si ces régles ne plaisent pas & tous. II faut malgré tout s'y plier & chaque ligne de code et tenir dans la durée. Dans ce livre, nous utiliserons les ragles suivantes: ¥ Indentation sur deux caractéres. ¥ Nommage en frangais du type getNbClient () pour retourner nbClient du ta- bleau clients. ¥ Une instruction par ligne. < Un point-virgule systématique en fin d’instruction VY Unusage des espaces pour séparer les mots clés comme if et devant les { 2.9.7 Travail en équipe Aujourd’hui, tous les projets utilisent un logiciel de gestion de versions. Aprés quelques années, Git, développé par le fameux Linus Torvalds, a supplanté les autres, comme SVN. Voici quelques fonctionnalités de Git: Y Il gére I'historique de toutes les modifications d'un projet. Y I facilite les retours en arriére. ¥ ll assure la détection et la correction assistée de modifications concurrentes, c’est-8- dire de modifications effectuées par plusieurs personnes sur la méme portion de code. Y llest décentralisé pour étre hébergé dans un lieu sécurisé et assurer la sauvegarde ou la redondance des données. Y IIpeut étre synchronisé avec d'autres logiciels pour effectuer des traitements supplé- mentaires (FTP mail, minification....) Naturellement, 'usage de Git est tout & fait recommandé et apporte toutes les fonction- nalités pour un développeur seul sur son projet. Le serveur Git s‘installe sur un serveur distant, sur un NAS ou sur un ordinateur personnel, Chaque utilisateur doit installer un client Git sur son poste de travail. Lapprentissage de I'administration serveur de Git nécessite du temps et une bonne mai- trise du l'utilisation des lignes de commandes. C’est pourquoi sont apparus des services web dans le cloud simplifiant la configuration. Le plus largement utilisé est GitHub.Structure d’un script DEUCE eee Tce ee Pee Cee ey web, en tenant compte de son impact sur le référencement dans les moteurs Cu a Ce CUE ee a CU Oat eae Pe ee eC ee ORC a See eS Oe eae Ca Re UCC uy Cee Pear eng ie cae er Cee ue eer Con Ly SC —3.1 INTEGRER DU JAVASCRIPT 3.1.1 Dans une page HTML Nous avons vu au chapitre précédent les cing exemples Hello World qui montrent que le code JavaScript s'intégre tout simplement au cceur du HTML avec les balises . La balise , mais pas les balises (© Duned~ Tut erodcton non atv su dt 3.1 Intégrer du JavaScript Le fichier hello,js correspondant contient simplement cette ligne | alert ("Hello World via un fichier JS"); © Lappel au fichier js Le code de notre page Hello World qui fait appel au fichier hello,js devient
La balise Naturellement, cet exemple est trivial, mais il montre l'intérét d'utliser un fichier externe contenant du code JavaScript. Il suffit de I’écrire une seule fois et de I'appeler avec une simple ligne 4 chaque page ou il est nécessaire. Généralement, un site emploie un fichier externe .js sur I'ensemble de ses pages pour la gestion de la navigation, des menus et des différents effets de style. Il est possible d'appeler un script hébergé sur un autre domaine en indiquant dans |'attri- but src le chemin d’accés complet | sros"https://cdnje.cloudflare.com/Libs/jquery.min.js" lexiste une autre écriture possible, sans la partie ht tp (s) :, qui indique au navigateur de choisir le protocole HTTP ou HTTPS utilisé par la page appelante © //cder}s .cloud flare .com/1ibs/jquery.min.js" CDN, ou Content Delivery Network Un CON est un réseau de diffusion de contenus spécialisé dans la diffusion de ressources statiques. telles que les fichiers js, des images, des logos... IIs sont destinés & ameéliorer la vitesse de trans- fort sur le réseau, grace & des implantations dans toutes les zones géographiques, au plus prés des utilsateurs Lappel en mode synchrone utilisation d'un fichier externe oblige le navigateur a faire un nouvel appel HTTP pour récupérer le contenu du fichier. Vous pouvez vous reporter au schéma de communication client/serveur de la page 6, qui explique ce mécanisme. GaChapitre 3m Structure d'un script Cet appel génére un délai pour envoyer la requéte et récupérer le résultat. Pendant ce ‘temps, le navigateur ne fait rien d’autre et attend le retour. Cet appel en mode synchrone garantit que le fichier est bien chargé avant de poursuivre le rendu de la page. Cette garantie se fait au prix d'une latence sur la vitesse du rendu. La latence est plus ou moins longue se- lon la taille du fichier js & récupérer et surtout selon la vitesse de connexion de l'utilisateur. Lapel asynchrone Par défaut, et sans indication contraire, un appel un fichier .js externe se fait en mode synchrone: le navigateur attend la fin du chargement pour poursuivre le rendu HTML. Il est possible de forcer les appels a des fichiers JavaScript en mode asynchrone. Dans ce cas, l'interprétation du code HTML n'est pas bloquée par I’appel et le navigateur poursuit le rendu de la page, tout en chargeant en paralléle le ou les fichiers fs externes. Une fois les fichiers chargés, ils sont interprétés et préts a étre utilisés. Le mode asynchrone accélére grandement le rendu de la page. Mais il est impossible de prévoir @ quel moment le fichier sera effectivement chargé et quand les fonctionnalités JavaScript présentes seront disponibles. Pour forcer I'appel en mode asynchrone, il suffit d’ajouter lattribut async dans la balise Dans ce mode, le navigateur lance le chargement des fichiers et les interpréte des quiils arrivent, sans se préoccuper de l'ordre d’appel initial. Lattribut defer, de l'anglais to defer, qui signifie « reporter », entraine un fonctionnement un peu différent, Le chargement des scripts est reporté & la fin de I'interprétation du docu- ment. Lordre d'appel des scripts est respecté. Cet attribut a peu d’intérét finalement: il suffit de placer les appels au fichier .js externe @ la toute fin du code HTML pour obtenir le fonctionnement équivalent. 3.1.4 Limpact du JavaScript sur le référencement utilisation du mode asynchrone oblige @ coder différemment et a s‘assurer via la détec- tion d’événements de fin de chargement que les fonctionnalités JavaScript ne seront pas appelées trop t6t, avant leur définition, sous peine d’erreur d’exécution. Malgré tout, augmentation des performances sera réellement sensible, a la fois pour les utilisateurs, qui ressentiront une plus grande fiuidité de navigation, et pour les moteurs de recherche. @ Le cache des navigateurs Les navigateurs utilisent un mécanisme de cache de fichiers pour stocker en local sur le disque dur les fichiers qui ont déja été appelés. Cette technique réduit par un facteur proche de 100 le temps nécessaire pour charger un fichier par rapport a un appel réseau ensemble des types de fichiers est concerné par le cache, comme les fichiers ¥s, .css et les images. Le cache rend donc la navigation bien plus rapide pour un visiteur récurrent. Le cache n’a aucun effet accélérateur pour une premiere visite. Le développeur web peut configurer son serveur web pour définir le temps de conserva- tion dans le cache, évitant ainsi de subir les latences réseaux. Plus le temps fixé est long,‘© Danod Toute eprint et un 3.2 Les variables moins il y aura d'appels réseaux au cours des futures visites. En revanche, le navigateur ne détectera pas une nouvelle version de fichier avant un délai important. Google PageSpeed recommande diaffecter au moins sept jours de durée de vie aux fi- chiers externes. En dessous de cette durée, des pénalités sont appliquées au score de performance de la page. Les fichiers CSS et le référencement Profitons de ce paragraphe pour faire un paralléle avec les fichiers CSS. II n’existe pas de systame de chargement asynchrone des fichiers de propriétés CSS. Google PageSpeed recommande de placer les styles absolument nécessaires pour un rendu minimaliste rapide dans le corps de la page, et le reste dans un fichier CSS, chargé en fin de code HTML. Cette recommandation est facile & mettre en place pour les pages tres simples de résultats de recherche que Google propose. Cela devient réellement pro- blématique pour un site éditorial proposant du contenu riche avec des mises en forme variées, —3.2 LES VARIABLES La programmation, quel que soit le langage, consiste toujours a manipuler des données et des informations afin de produire un résultat en sortie de traitement ¥ Un site web utilise une base de données et les clics de l'utilisateur pour afficher les informations demandées. Y Un jeu vidéo utilise les commandes de la manette pour afficher des images a l'écran. Y Le logiciel de guidage de fusées utilise les données des capteurs de vol pour envoyer des consignes de poussée aux réacteurs. Pour stocker ces données, le développeur crée et utilise des variables. Une variable est une zone de mémoire destinée a stocker une information. Le terme variable a été choisi pour rappeler que la donnée varie au cours de l'exécution du script. Une variable est définie par un nom choisi par le développeur. Un nom de variable doit commencer par une lettre et peut contenir ensuite des lettres, en majuscules ou en mi- nuscules, des chiffres et quelques caractéres spéciaux comme $ ou _. Le caractére tiret Nest pas autorisé car il correspond a l'opérateur de soustraction.Chapitre 3 m™ Structure d'un script Le nom donné a une variable ne peut étre un mot réservé par le langage, comme var, if ou window. Les noms de variables infos, chienAge, chien2_age sont valides. En revanche e1se, 2B3 ou a*b ne sont pas autorisés. 3.2.1 Déclaration de variables La phase de création d'une variable est appelée déclaration. Elle se fait avec l'opérateur bien nommé var. DD Sensibilité & la casse La casse est la distinction entre majuscule et minuscule. Le JavaScript est sensible a la casse, c’est- a-dire que les variables nom, Nom et NOM sont tris variables différentes, contenant des données différentes. Cette sensibilité est source d’erreur a I'exécution a partir d'une simple erreur de frappe. De bonnes régles de nommage sont un bon moyen de les limiter. La phase de déclaration est souvent mise & profit pour initialiser la variable, c’est-a-dire lui donner une valeur initial. Par exemple, cette instruction déclare une variable compteur et Initialise & 0 | var compteur=0; ILest possible aussi de déclarer plusieurs variables avec un seul appel a var, en séparant les variables par une virgule: | var compteur=0, texte="Hello", maxi=100; Comme dans tous les langages de programmation, la déclaration de variable est indis- pensable. Utiliser une variable non déclarée entraine une erreur a I'exécution du type ReferenceError variableInconnue is not defined, qui saffiche dans la console. Le message d'erreur varie selon le navigateur utilisé mais l'erreur se produira systématiquement. Sila décleration est obligatoire, I'nitialisation peut se faire plus tard dans le déroulement du script. On peut donc utiliser var sans I'affectation de valeur: | var compteur, texte, maxis Dans ce cas, le contenu des variables nest pas encore connu. Le navigateur sait simple- ment qu'une variable a été créée et pourra étre utilisée. Contenant et contenu Ne confondez pas le nom de la variable et son contenu. console. log ("compteur") affichera la chaine de caractéres "compteur". Tandis que console. log (compteur) affichera le contenu de la variable compteur. La coloration syntaxique de |'éditeur de texte distingue les chaines de caractéres des variables.(© Dunes — Tate erodcton ron avo et nd 3.2 Les variables 3.2.2 Les types de variables Une variable JavaScript peut contenir une grande variété de types de données, comme des nombres, des chaines de caractéres, des dates, des tableaux ou un objet complexe. Le langage JavaScript est «faiblement typé», c'est-a-dire qu'il autorise une variable a contenir n‘importe quel type de données et a en changer en cours d’exécution. Cette souplesse, qu'on peut méme qualifier de laxisme, est difficile @ concevoir pour un déve- loppeur habitué aux langages classiques, nettement plus stricts. Si vous respectez des régies de nommage, vous savez, en tant que développeur, ce que peut contenir une variable a partir de son nom. Cependant aucun mécanisme de contréle JavaScript ne garantit une cohérence entre les noms et les contenus. Le fonctionnement d'une simple opération d’addition peut avoir des effets étranges si le type de la variable n'est pas cohérent. Explorons un cas intéressant avec un petit script var nl=10, n2=i m3 console.log(nl+n2) console.1og(n3+nl) + Le développeur s‘attend a ce que la console contienne 30 (10+20) et 15 (5+10). Pourtant le second résultat est 510 TR Gi] | Slements Console Sources Network Performance Memory Application Securty Audis B 8 |» | itor Defauit levels ¥§ Group similar Fy 510 La subtilité vient de la déclaration de la variable n3. A cause de la notation n: est une chaine de caractéres. Lopérateur + réalise alors une concaténation, c’est-a-dire qu'il assemble le texte des deux parties de l'opération et on obtient littéralement les caractéres 5 et 10 a la suite. Nous verrons en détail dans les prochains chapitres comment manipuler les nombres, les chaines de caractéres et les autres objets contenant des informations. Lopérateur typeof Le JavaScript propose l'opérateur typeof, qui retourne une chaine de caractéres avec le type du contenu d'une variable. Ce script définit des variables et atfiche leur type JavaScript:
Progranmation
hi id: Le type undefined Dans I'exemple, la variable a est déclarée sans étre initialisée. Le type de contenu ne peut as étre défini. Lopérateur typeof retoure donc undefined. Le type number Le JavaScript ne distingue pas les différents types de nombres comme dans d'autres langages. Les petits entiers, les trés grands entiers et les nombres a virgule sont tous de type number. Les variables de type number peuvent étre manipulées avec les fonctions mathéma- tiques classiques. © Le type string Le type string désigne les chaines de caractéres, identifies par les séparateurs " qui délimitent le contenu de la chaine. Comme pour les nombres, il n'y @ pas de notion de taille ou de longueur en JavaScript. Une chatne de 1 ou de 1000 caractéres est de type string, JavaScript propose de trés nombreuses fonctionnalités de manipulation de chaines de caractéres, que nous verrons dans le chapitre dédié suivant. Le type object Le type object est un type générique pour définir une structure de données complexe. Un objet est un ensemble organisé de propriétés et de fonctionnalités. Comme le JavaScript est un langage objet, ce type est central dans le langage et nous lui accorderons le chapitre 8. Le type boolean Le type boolean, pour «booléen» en francais, vient du mathématicien anglais Boole, inventeur de l'algebre de Boole des 1854. 'algebre de Boole s‘applique aux opérations de logique sur des variables ne pouvant prendre que deux états, vrai (true) ou faux (false). Inventé plus d'un siécle avant informatique, il est encore au coeur de tous les tests et des ‘embranchements dans tous les langages.3.3 Les blocs d’instructions Nous I'aborderons donc en détail aux paragraphes suivants, qui concement les tests conditionnels et les boucles. 3.2.3 Les constantes Une constante est comparable a une variable qui ne peut pas étre modifi¢e une fois créée. Une constante est déclarée par const avec une valeur d'initialisation obligatoire Si le script tente de changer la valeur de la constante, une erreur du type TypeError: Assignment to constant variable est déclenchée. Une constante dans un script peut étre, par exemple, le taux de conversion entre le franc et l'euro. lly aun double intérét a utiliser une constante a la place d'une variable qui ne sera jamais modifiée a I'exécution ¥ Le développeur indique directement dans le code que la constante est destinée a étre fixe, ¥ Le navigateur s'assure a l'exécution qu'une erreur de programmation ne viendra pas modifier cette valeur. —3.3 LES BLOCS D’INSTRUCTIONS Nous avons déja vu qu'une instruction JavaScript se termine par un point-virgule ou un saut de ligne. En JavaScript, comme dans de nombreux langages, le regroupement d'ins- tructions se fait 8 I'intérieur d'un bloc commengant par une accolade ouverte { et se ter minant par une accolade fermante }. Dans un script, il y a obligatoirement autant d’acco- lades ouvrantes que fermantes. Un nombre différent entraine nécessairement une erreur. Puisque le saut de ligne signifie une fin d’instruction, il n’est pas possible d’écrire une ins- truction sur plusieurs lignes comme dans d'autres langages. Une erreur sera déclenchée. Si, pour des raisons de mise en page, une instruction est écrite sur plusieurs lignes dans ce livre, il faut considérer qu'elle tient sur une seule ligne dans le script. Le regroupement d’instructions est trés utile car il permet d'organiser les traitements composés d'un nombre plus ou moins élevé d'instructions, selon différents embranche- ments. Il existe des variables dont la portée se limite au bloc d’instructions courant dans lequel elles sont déclarées. ee eee ceeerets aoe re res ‘est manipulable. Quand on déclare une variable avec let au lieu de var, sa portée est limitée au bloc ou la déclaration est faite. Voici quelques exemples de portées de variables créées avec let let a1, bel; // Déclaration dans le bloc de plus haut niveau console.log(a); // affiche 1 if (a1) { let b // Péclaration de b dans un bloc inférieur console.log(a); // affiche 1Chapitre 3 m Structure d'un script console.1og(b); // affiche 0 } console.log(b); // affiche 1 Une variable déclarée avec Let est visible dans les blocs de plus bas niveau. Dans le bloc de condition if, une nouvelle variable b est créée et initialisée 4 0. La variable b du bloc supérieur n’est pas affectée a la fin du bloc if et vaut toujours 1. Nous verrons en détail dans le paragraphe sur les fonctions a la page 52 les différents niveaux de portée des variables. —3.4 LES TESTS CONDITIONNELS Un programme est composé d'une série d'instructions qui s'enchainent séquentiellement les unes a la suite des autres. Les tests conditionnels permettent d'orienter I'exécution vers des embranchements d'instructions selon le résultat de conditions définies par le développeur. 3.4.1 Le test simple Dans le cas d'un test conditionnel simple, le bloc d'instructions n'est exécuté que si le résultat de la condition est vrai Imaginons le calcul de frais de port sur un devis. Si le montant total est supérieur ou égal 2 100 euros, les frais de ports sont offerts: if (montant>=100) { var port ) Linstruction i£ attend une condition, écrite entre parenthéses. Si la condition est remplie, c'est-a-dire si le résultat de la condition vaut true, le bloc d’instructions du if s‘exécute. Sila condition vaut false, le bloc d’instructions est ignoré. Quand il n'y a qu'une seule instruction dans le bloc & exécuter, comme c’est le cas dans cet exemple, il est possible de ne pas utiliser les accolades. Seule I'instruction directe- ment aprés la condition est exécutée. Les écritures suivantes auraient le méme résultat: Y Soit sur une seule ligne: | i£ (montant>=100) var port=0; Y Soit, plus classiquement, avec une ligne par instruction if (montant>=100) var port=0; Linconvénient de cette écriture compacte est que vous ne pouvez pas ajouter une autre ins- truction liée & la condition. Seule Instruction placée immédiatement apres le test est condi- tionnée. Les autres sont exécutées systématiquement. Le choix de l'ajout systématique d'accolades dépend des ragles de programmation que vous avez définies dans le projet.3.4 Les tests conditionnels 3.4.2 Le test si - sinon Le test simple s'accompagne souvent d'un bloc d’instructions exécutées si la condition initiale n'est pas remplie. Sila condition du if n’est pas true, les instructions du bloc if sont toujours ignorées et celles du bloc ese sont lancées. Inversement, si la condition du if est vraie, les instructions e1se ne sont pas exécutées. Reprenons notre exemple de calcul de frais de port. Si le montant est supérieur ou égal & 100 euros, le port est offert, sinon il est d’un montant forfaitaire de 6,90 euros: if (montant>=100) ( var port=0; } else { var port=6. ) Comme pour le test simple, l'utilisation des accolades n'est pas obligatoire. Ce test peut aussi s’écrire i€ (montant>=100) var port=0; else var port=6.9; Méme si cette écriture n’est pas trés lisible, elle est réguliérement utilisée pour sa compa- cité et l'économie de quelques octets réalisée. Le JavaScript ne posséde pas de condition elseif comme d'autres langages. II est cependant possible de faire un enchainement de conditions en ajoutant un espace entre else et if pour obtenirelse if. Imaginons que notre calcul de frais de port nécessite finalement deux paliers. Un premier 6,90 pour moins de 50 euros d’achat et un second a 3,90 pour moins de 100 euros et toujours le port offert au-dela. Le calcul de port pourrait s‘écrire: if (montant>=100) { var port=0; } else if (montant>=50) ( var port=3.9; } else { var port=6.9; } Les tests conditionnels peuvent vite devenir ardus a écrire et 2 comprendre. Le para- graphe sur les conditions a la page 41 présente en détail tous les opérateurs de con tions et la maniére de les rendre les plus compréhensibles possible. 3.4.3 Les tests multiples Il existe une autre maniére de traiter des tests multiples, cette fois-ci sur des conditions d'égalité. Lécriture est particuliére et présente cette structure switch (expression) { case valeurl: blocInsctructions1 break;Chapitre 3m Structure d'un script case valeurN: blocInsctructionsN breaks default: blocinsctructionsDefault ) instruction switch démarre le bloc conditionnel en testant la valeur retournée par expression. Une expression est un traitement sur des données qui retourne un résultat. Cela peut étre soit une variable simple, soit un calcul sur plusieurs variables. Le résultat de l'expression est comparé aux valeurs de chaque bloc case. Si la valeur de expression est égale & celle d'un des case, son bloc d’instructions est exécuté. Notez au'ici il n'y a pas d’accolades pour marquer les blocs. La fin des instructions est matéria- lisée par l'instruction break. Si le break est omis, I'exécution se poursuit avec la valeur suivante du prochain case. Si aucune valeur n’est trouvée, le bloc facultatif default est exécuté. Voici un exemple d'utilisation de switch et case sur le jour de la semaine pour afficher un message d'information dans la balise h1