Académique Documents
Professionnel Documents
Culture Documents
03A JavaScript Introduction
03A JavaScript Introduction
TECH20711
Développement d’applications d’affaires
• Originalement créé en 1995 par Brendan Eich alors qu’il travaillait pour la Netscape Communication Corporation.
• Originalement, l’objectif principal du langage était de gérer une partie de la validation d'entrées (données de
formulaires) qui avait été précédemment laissée aux langages côté serveur afin d’éviter des aller-retour vers le
serveur pour déterminer si un champ obligatoire avait été laissé vide ou si une valeur entrée n'était pas valide.
• JavaScript interagit désormais avec presque tous les aspects de la fenêtre du navigateur et de son contenu.
• JavaScript ≠ Java (La syntaxe de base est volontairement similaire à Java et à C++).
• Souvent abrégé en « JS ».
• Langage de script léger (famille de langages de programmation).
• Code interprété = compilé à la volée « JIT Compilation »
• Permet de programmer suivant plusieurs paradigmes de programmation : Impérative, fonctionnelle et OO.
• Langage faiblement typé.
• Langage sensible à la casse (Tout est sensible à la casse : identificateurs, mot clés, mots réservés, opérateurs … )
• Dans le cadre du cours, sera principalement utilisé pour rendre notre page web interactive avec du contenu
dynamique coté client.
JavaScript
• Bien que JavaScript et ECMAScript soient souvent utilisés comme synonymes, JavaScript est bien plus que
la définition de la norme ECMA-262.
• JavaScript est une implémentation complète et est composée des trois parties distinctes :
• Le noyau (ECMAScript)
• Le modèle Objet du document (Document Object Model – DOM)
• Le modèle Objet du navigateur (Browser Object Model – BOM)
JavaScript
• ECMAScript (La norme ECMA-262), n'est pas liée aux navigateurs Web (aucune méthode d'entrée/sortie).
• Une base sur laquelle des langages de script plus robustes peuvent être construits (ici JavaScript).
• Les navigateurs Web ne sont qu'un environnement hôte dans lequel une implémentation ECMAScript peut
exister.
• Elle décrit, à un niveau basique les éléments suivants du langage qui l’implémente:
La syntaxe, les types de données, les mots clés et mots réservés, les opérateurs, …
JavaScript
• Le Document Object Model (DOM) est une interface de programmation d'application (API) pour XML
(étendue pour une utilisation en HTML).
• Le DOM consiste en une représentation sous la forme d'une hiérarchie de nœuds (arborescence)
représentant la structure HTML d’un document web.
• Le DOM permet ainsi aux développeurs un niveau de contrôle sur le contenu et la structure d’un document
HTML.
• Les nœuds peuvent être supprimés, ajoutés, remplacés et modifiés facilement à l'aide de l'API DOM.
JavaScript
<html> Titre de la
title
<head> page
<meta charset="utf-8"> head
<title>Titre de la page</title> meta
</head>
<body> html
<h1>Titre de niveau 1</h1>
Titre de
h1
<p>Contenu du paragraphe</p> niveau 1
</body>
body
Contenu du
</html> p
paragraphe
JavaScript
Le BOM offre des méthodes et interfaces permettant d’interagir avec la fenêtre et les cadres du navigateur :
• Faire apparaître de nouvelles fenêtres de navigateur.
• Déplacer, redimensionner et fermer les fenêtres du navigateur.
• Fournir des informations détaillées sur le navigateur du client à l’aide de l'objet navigator.
• Donner des informations détaillées sur la page chargée dans le navigateur à l’aide de l’objet location.
• Donner des informations détaillées sur la résolution d'écran de l'utilisateur à l’aide de l’objet window.
• Fournir des informations détaillées sur la consommation de mémoire du navigateur et le comportement de
navigation à l’aide de l'objet performance.
• Prendre en charge les cookies
• Donner accès à certains objets tels que XMLHttpRequest et ActiveXObject d'Internet Explorer
02 <html>
• L’élément script peut être placé à n’importe quel 03 <head>
endroit dans la page HTML où l’utilisation d’une balise 04 <meta charset="utf-8">
05 <title>Exemple - Balises script</title>
est tolérée, que ce soit dans la section head ou body du 06 </head>
document. 07 <body>
08
• Aucune restriction sur le nombre d’éléments script 09
utilisés au sein de la page. 10
11
Le code du premier élément <script> est complètement 12 <!-- Le contenu de la page -->
interprété avant que le deuxième élément <script> ne 13
commence l'interprétation, le second est terminé avant le 14
troisième, et ainsi de suite. 15
16
• Le téléchargement, l’analyse et l’interprétation d’un 17
18 <script src="./mesScripts/script1.js"></script>
code JavaScript débute lorsque la balise script est 19 <script src="./mesScripts/script2.js"></script>
rencontrée. 20 </body>
21 </html>
• Le rendu « rendering » de la page ne se poursuit que 22
lorsque l’interprétation du script en question est terminée. 23
24
• Pour cette raison, il est d’usage que tous les scripts
25
incorporés à la page soient dans l'élément <body>, après le 26
contenu de la page (à la fin du body). 27
28
02 <html>
03 <head>
• Le programmeur a tendance à sous-estimer les 04 <title>Exemple - Les commentaires</title>
avantages que procure les commentaires au code : 05 <meta charset="utf-8">
06 </head>
• Pourquoi ? 07 <body>
• Maintenances perfective et évolutive : Les besoins d’affaires 08 <!-- Un commentaire HTML -->
09 <script type="text/javascript">
évoluent et les programmes doivent s’adapter (être maintenus).
10 //Un commentaire sur une seule ligne
• Maintenance corrective : Le programme doit être déverminé 11
« Débogué » lorsqu’une erreur se manifeste ou qu’une 12 x++; //Un commentaire sur le reste de la ligne
défaillance se produit. 13
14 /*
• Pour qui ? 15 Un
• À la lecture du code par soi-même ou par un autre programmeur 16 commentaire
dans le but de le maintenir, le tester ou d’en contrôler la qualité. 17 multi ligne
18 */
• JavaScript propose deux types de commentaires : 19 </script>
20 </body>
• les commentaires sur une seule ligne et les commentaires 21 </html>
sur plusieurs lignes. 22
• Les commentaires sur une seule ligne commencent par // et se 23
terminent par la fin de la ligne 24
25
• Les commentaires multi-lignes sont délimités par /* et */ 26
27
28
02 //Exemples
03
04 montantTaxe
• Un identificateur est le nom d'une variable, d'une 05 motPasseUsager1
fonction, d'une propriété ou d'un paramètre formel 06 provinceAchat
d’une fonction. 07 totalFacture
08 estTaxable
• Un identificateur doit respecter les règles de 09
10 //Identificateurs de fonctions
nomenclature ci-dessous : 11 //Exemples
• Le premier caractère doit être une lettre, un souligné « _ » 12
13 calculerTaxes
ou un signe dollar « $ ». 14 afficherFacture
• Les caractères qui suivent peuvent être des lettres, des 15
« _ » , des « $ » ou des chiffres.
• Les lettres d'un identificateur peuvent inclure des
caractères de lettres ASCII ou Unicode étendus tels que
« à » et « π », bien que cela ne soit pas recommandé. Le langage JavaScript est sensible à la casse.
• Un identificateur ne peut être un mot clé ou mot
réservé du langage. ! Les identificateurs « montantTaxe » et « montanttaxe »
sont différents, faisant référence à deux éléments
distincts !
02 // est la suivante:
03
04 break do in typeof
05 case else instanceof var
06 catch export new void
07 class extends return while
08 const finally super with
09 continue for switch yield
10 debugger function this
11 default if throw
• ECMA-262 décrit un ensemble de mots-clés réservés qui 12
13
delete import try
• Un programme informatique opère sur des données. Ces données se distinguent premièrement par leur faculté à
évoluer dans le temps « variables », ou données statiques qui ne changeront pas pendant l’exécution du
programme « constantes ».
• Lors de la conception d’un programme, pour chacune des données utilisée, une réflexion est donc portée sur un
ensemble d’éléments :
• La donnée est-elle fournie en entrée ou est produite par un calcul ou traitement quelconque (intrants vs extrants) ?
• Son type (un nombre entier, un nombre réel, un caractère quelconque, une chaine de caractères, un booléen …) et
particulièrement l’espace mémoire nécessaire afin de l’emmagasiner ?
• Sa faculté à évoluer dans le temps ?
• Trois mots clés peuvent être utilisés pour déclarer une variable / constante:
• var – disponible dans toutes les versions d'ECMAScript
• const et let – introduits dans ECMAScript 6.
02 <html>
03 <head>
04 <title>Exemple - let</title>
• JavaScript est un langage faiblement typé (Typage 05 <meta charset="utf-8">
dynamique). 06 </head>
07 <body>
• Une variable en JavaScript est donc réduite à un espace 08 <script type="text/javascript">
réservé et nommé pouvant contenir une valeur peu 09 console.log(montant);
importe son type. 10
11 //Déclaration de la variable montant
• Le type est associé à la valeur et non à la variable. 12 let montant;
13 console.log(montant);
• Dans le cadre du cours, nous utiliserons le mot clé let 14 //Initialisation de la variable
pour la déclaration de variables. 15 montant = 100;
16 console.log(montant);
• En JavaScript, la convention veut que l’identificateur 17 //Modification de la valeur
18 montant = 99.99;
d’une variable : 19 console.log(montant);
• Utilise le camelCase, ce qui signifie que la première lettre 20 //La valeur affectée peut être le résultat
est en minuscule et chaque mot supplémentaire débute par 21 //de l'évaluation d'une expression
22 montant = 99.99 * 1.1497;
une majuscule. 23 console.log(montant);
24
25 let montant;
26 </script>
27 </body>
28 </html>
02
03 // Valide même sans ; - non recommandé
04 let somme = 8 + 2
05
06
07 // Valide et recommandé
08 let diff = 8 - 2 ;
• Un programme JavaScript est une suite finie 09
10 </script>
d’instructions. 11
12
• Malgré que ce ne soit pas requis, il est fortement 13
conseillé de terminer chacune des instructions 14
15
ECMAScript par un point-virgule « ; ».
• Lorsqu’omis, l’analyseur syntaxique tente de deviner
l’endroit le plus vraisemblable où l’instruction est
supposée se terminer.
console.log(`1 + "1"
= ${1+true}`);
console.log(`false + true = ${false+true}`);
= ${1+"1"}`); ! opérandes est une chaine, l’opérateur
« + » concatène les deux opérandes et
le résultat est une chaine de caractères.
02 let ch = "DAA";
03 console.log(`nb = ${nb} | x = ${x} | ch = ${ch}`);
04
05 // +=
06 console.log(`nb += 10 <=> (nb = nb + 10) >> nb = ${nb += 10}`);
07 console.log(`nb += x <=> (nb = nb + x) >> nb = ${nb += x}`); nb x
08 console.log("ch += \" (\" + x + \"ième version)\"\n" +
09 "<=> ch = ch + \" (\" + x + \"ième version)\"\n" +
10 ">> ch = " + (ch += " (" + x + "ième version)")); 10 2
11
12 // -= ch
13 console.log(`nb -= 10 <=> (nb = nb - 10) >> nb = ${nb -= 10}`);
14 console.log(`nb -= x <=> (nb = nb - x) >> nb = ${nb -= x}`);
15 DAA
16 // *=
17 console.log(`nb *= 2 <=> (nb = nb * 2) >> nb = ${nb *= 2}`);
18 console.log(`nb *= nb <=> (nb = nb * nb) >> nb = ${nb *= nb}`);
19
20 // /=
21 console.log(`nb /= 4 <=> (nb = nb / 4) >> nb = ${nb /= 4}`);
22 console.log(`nb /= x <=> (nb = nb / x) >> nb = ${nb /= x}`);
23
24 // %=
25 console.log(`nb %= 2 <=> (nb = nb % 2) >> nb = ${nb %= 2}`);
26
27 // **=
28 console.log(`x **= 10 <=> (x = x ** 10) >> x = ${x **= 10}`);
02 let ch = "DAA";
03 console.log(`nb = ${nb} | x = ${x} | ch = ${ch}`);
04
05 // +=
06 console.log(`nb += 10 <=> (nb = nb + 10) >> nb = ${nb += 10}`); nb x
07 console.log(`nb += x <=> (nb = nb + x) >> nb = ${nb += x}`);
08 console.log("ch += \" (\" + x + \"ième version)\"\n" +
09 "<=> ch = ch + \" (\" + x + \"ième version)\"\n" +
22 2
10 ">> ch = " + (ch += " (" + x + "ième version)"));
11
12 // -=
13 console.log(`nb -= 10 <=> (nb = nb - 10) >> nb = ${nb -= 10}`);
14 console.log(`nb -= x <=> (nb = nb - x) >> nb = ${nb -= x}`);
15
16 // *=
17 console.log(`nb *= 2 <=> (nb = nb * 2) >> nb = ${nb *= 2}`);
18 console.log(`nb *= nb <=> (nb = nb * nb) >> nb = ${nb *= nb}`);
19
nb x
20 // /=
21 console.log(`nb /= 4 <=> (nb = nb / 4) >> nb = ${nb /= 4}`); 10 2
22 console.log(`nb /= x <=> (nb = nb / x) >> nb = ${nb /= x}`);
23
24 // %=
25 console.log(`nb %= 2 <=> (nb = nb % 2) >> nb = ${nb %= 2}`);
26
27 // **=
28 console.log(`x **= 10 <=> (x = x ** 10) >> x = ${x **= 10}`);
02 let ch = "DAA";
03 console.log(`nb = ${nb} | x = ${x} | ch = ${ch}`);
04
05 // +=
06 console.log(`nb += 10 <=> (nb = nb + 10) >> nb = ${nb += 10}`);
07 console.log(`nb += x <=> (nb = nb + x) >> nb = ${nb += x}`);
08 console.log("ch += \" (\" + x + \"ième version)\"\n" +
09 "<=> ch = ch + \" (\" + x + \"ième version)\"\n" +
10 ">> ch = " + (ch += " (" + x + "ième version)"));
11
nb x
12 // -=
13 console.log(`nb -= 10 <=> (nb = nb - 10) >> nb = ${nb -= 10}`); 10 2
14 console.log(`nb -= x <=> (nb = nb - x) >> nb = ${nb -= x}`);
15
16 // *=
17 console.log(`nb *= 2 <=> (nb = nb * 2) >> nb = ${nb *= 2}`);
18 console.log(`nb *= nb <=> (nb = nb * nb) >> nb = ${nb *= nb}`);
19
20 // /=
21 console.log(`nb /= 4 <=> (nb = nb / 4) >> nb = ${nb /= 4}`);
22 console.log(`nb /= x <=> (nb = nb / x) >> nb = ${nb /= x}`);
23 nb x
24 // %=
25 console.log(`nb %= 2 <=> (nb = nb % 2) >> nb = ${nb %= 2}`); 400 2
26
27 // **=
28 console.log(`x **= 10 <=> (x = x ** 10) >> x = ${x **= 10}`);
02 let ch = "DAA";
03 console.log(`nb = ${nb} | x = ${x} | ch = ${ch}`);
04
05 // +=
06 console.log(`nb += 10 <=> (nb = nb + 10) >> nb = ${nb += 10}`);
07 console.log(`nb += x <=> (nb = nb + x) >> nb = ${nb += x}`);
08 console.log("ch += \" (\" + x + \"ième version)\"\n" +
09 "<=> ch = ch + \" (\" + x + \"ième version)\"\n" +
10 ">> ch = " + (ch += " (" + x + "ième version)"));
11
12 // -=
13 console.log(`nb -= 10 <=> (nb = nb - 10) >> nb = ${nb -= 10}`);
14 console.log(`nb -= x <=> (nb = nb - x) >> nb = ${nb -= x}`);
15 nb x
16 // *=
17 console.log(`nb *= 2 <=> (nb = nb * 2) >> nb = ${nb *= 2}`); 400 2
18 console.log(`nb *= nb <=> (nb = nb * nb) >> nb = ${nb *= nb}`);
19
20 // /=
21 console.log(`nb /= 4 <=> (nb = nb / 4) >> nb = ${nb /= 4}`);
22 console.log(`nb /= x <=> (nb = nb / x) >> nb = ${nb /= x}`);
23
24 // %= nb x
25 console.log(`nb %= 2 <=> (nb = nb % 2) >> nb = ${nb %= 2}`);
26 50 2
27 // **=
28 console.log(`x **= 10 <=> (x = x ** 10) >> x = ${x **= 10}`);
02 let ch = "DAA";
03 console.log(`nb = ${nb} | x = ${x} | ch = ${ch}`);
04
05 // +=
06 console.log(`nb += 10 <=> (nb = nb + 10) >> nb = ${nb += 10}`);
07 console.log(`nb += x <=> (nb = nb + x) >> nb = ${nb += x}`);
08 console.log("ch += \" (\" + x + \"ième version)\"\n" +
09 "<=> ch = ch + \" (\" + x + \"ième version)\"\n" +
10 ">> ch = " + (ch += " (" + x + "ième version)"));
11
12 // -=
13 console.log(`nb -= 10 <=> (nb = nb - 10) >> nb = ${nb -= 10}`);
14 console.log(`nb -= x <=> (nb = nb - x) >> nb = ${nb -= x}`);
15
16 // *=
17 console.log(`nb *= 2 <=> (nb = nb * 2) >> nb = ${nb *= 2}`);
18 console.log(`nb *= nb <=> (nb = nb * nb) >> nb = ${nb *= nb}`);
19 nb
20 // /=
nb
21 console.log(`nb /= 4 <=> (nb = nb / 4) >> nb = ${nb /= 4}`);
22 console.log(`nb /= x <=> (nb = nb / x) >> nb = ${nb /= x}`); 50 0
23
24 // %=
25 console.log(`nb %= 2 <=> (nb = nb % 2) >> nb = ${nb %= 2}`);
26
27 // **=
28 console.log(`x **= 10 <=> (x = x ** 10) >> x = ${x **= 10}`);
02 let ch = "DAA";
03 console.log(`nb = ${nb} | x = ${x} | ch = ${ch}`);
04
05 // +=
06 console.log(`nb += 10 <=> (nb = nb + 10) >> nb = ${nb += 10}`);
07 console.log(`nb += x <=> (nb = nb + x) >> nb = ${nb += x}`);
08 console.log("ch += \" (\" + x + \"ième version)\"\n" +
09 "<=> ch = ch + \" (\" + x + \"ième version)\"\n" +
10 ">> ch = " + (ch += " (" + x + "ième version)"));
11
12 // -=
13 console.log(`nb -= 10 <=> (nb = nb - 10) >> nb = ${nb -= 10}`);
14 console.log(`nb -= x <=> (nb = nb - x) >> nb = ${nb -= x}`);
15
16 // *=
17 console.log(`nb *= 2 <=> (nb = nb * 2) >> nb = ${nb *= 2}`);
18 console.log(`nb *= nb <=> (nb = nb * nb) >> nb = ${nb *= nb}`);
19
20 // /=
21 console.log(`nb /= 4 <=> (nb = nb / 4) >> nb = ${nb /= 4}`);
22 console.log(`nb /= x <=> (nb = nb / x) >> nb = ${nb /= x}`); x x
23
24 // %=
25 console.log(`nb %= 2 <=> (nb = nb % 2) >> nb = ${nb %= 2}`);
2 1024
26
27 // **=
28 console.log(`x **= 10 <=> (x = x ** 10) >> x = ${x **= 10}`);
02 //Exponentiation
03 console.log(`Math.pow(2,10) = ${Math.pow(2,10)}`);
04
05 //Valeur arrondie
06 console.log(`Math.round(.5) = ${Math.round(.5)}`);
07 console.log(`Math.round(.49) = ${Math.round(.49)}`);
08
09 //Valeur plafond
10 console.log(`Math.ceil(.001) = ${Math.ceil(.001)}`);
11
12 //Valeur plancher
13 console.log(`Math.floor(.99) = ${Math.floor(.99)}`);
14
15 //Valeur absolue
16 console.log(`Math.abs(-100) = ${Math.abs(-100)}`);
17
18 //Valeur maximale parmi plusieurs (une à plusieurs)
19 console.log(`Math.max(5,7,2) = ${Math.max(5,7,2)}`);
20
21 //Valeur minimale parmi plusieurs (une à plusieurs)
22 console.log(`Math.min(5,7,2) = ${Math.min(5,7,2)}`);
23
24 //Valeur de la racine carrée
25 console.log(`Math.sqrt(16) = ${Math.sqrt(16)}`);
26
27 //Valeur de la racine cubique
28 console.log(`Math.cbrt(27) = ${Math.cbrt(27)}`);
02
03
04
05
06 //Création de versions modifiées
07 console.log(`msg.replace("us", "dos") = ${msg.replace("us", "dos")}`);
08 console.log(`msg.toLowerCase() ....... = ${msg.toLowerCase()}`);
09 console.log(`msg.toUpperCase() ....... = ${msg.toUpperCase()}`);
10
11 //Récupéreation d'un simple caractère
12 console.log(`msg.charAt(0) ........... = ${msg.charAt(0)}`);
13 console.log(`msg.charAt(msg.length-1) = ${msg.charAt(msg.length-1)}`);
14
15 //Remplissage (padding)
16 console.log(`"ab".padStart(4) ........ = ${"ab".padStart(4)}`);
17 console.log(`"ab".padStart(4, "-") ... = ${"ab".padStart(4, "-")}`);
18 console.log(`"ab".padEnd(4, "-") ..... = ${"ab".padEnd(4, "-")}`);
19
20 //Tailler (trimming)
21 console.log(`" ab ".trim()+"|" ... = ${" ab ".trim()}|`);
22 console.log(`" ab ".trimStart()+"|"= ${" ab ".trimStart()}|`);
23 console.log(`" ab ".trimEnd() +"|"= ${" ab ".trimEnd()}|`);
24
25 console.log(`"ab".repeat(4) .......... = ${"ab".repeat(4)}`);
26
27
28