SI4 - 04 Cours Javascript
SI4 - 04 Cours Javascript
SI4 - 04 Cours Javascript
JavaScript
date révision
Septembre 2019 V.76 Reprise pour SI4
26/09/2019 v.93 code exemple citation retravaillé
03/10/2019 Mise au standard DR2019
25/10/2019 v.107 ajouts des résumés, approfondissement des tableaux
21/11/2019 v.117 Explications sur le DOM et les événements. Restructuration et ajout d'exemples
1 INTRODUCTION
Les origines de JavaScript remontent à mai 1995. Ce langage a été mis au point par Brendan EICH en
10 jours a été baptisé LiveScript dans sa version 1.0. La popularité du langage Java et un partenariat
avec Sun Microsystem suggère de remplacer le mot 'live' par 'Java' pour servir l'intérêt des deux
sociétés : JavaScript été né ! Il est intégré au navigateur Navigator 2.0.
Microsoft lui a alors emboîté le pas avec Jscript 1.0 dans Internet Explorer 3.0 dès la version 1.1 de
Jscript et JavaScript, les deux langages sont devenus incompatibles.
En 1996, Netscape rend public les définitions de son langage et le soumet à l'ECMA (une organisation
suisse) pour standardisation et en 1997, le standard devient ECMAScript. Malgré cela, la version de
JavaScript 1.2 et Jscript 2.0 deviennent encore moins compatibles et c'est une guerre de part de
marché qui commence. Les concepteurs de pages web doivent effectuer de nombreuses adaptations
pour permettre un affichage similaire dans chaque navigateur.
Aujourd'hui, l'historique d'ECMAScript montre les différentes évolutions, mais surtout, une adoption
par la majorité des navigateurs en 2009 (il intègre de nombreuses bibliothèques) :
Ce langage inspiré de Java est largement simplifié et permet d’accéder aux objets dans les applications
web notamment. Il est utilisé pour vérifier les champs de saisies dans les formulaires, il permet de
faire des animations ou des effets de transitions.
1.1 FONCTIONNEMENT
JavaScript peut être placé n’importe où dans la page web, dans les balises <script> </script>. Comme
pour CSS, le code JavaScript peut être intégré dans la page HTML ou bien dans un fichier séparé.
Il est aussi possible de placer le script dans un fichier à part, pour limiter le mélange des langages :
<html>
<head> Le script doit être chargé : le navigateur
<title> Ma page web </title> recherche donc le fichier
<script type="text/javascript" "QuoteOfTheDay.js"
src="QuoteOfTheDay.js">
</script> Le script est chargé au moment ou il
apparaît, toutefois, si ce sont des
</head>
fonctions, elles ne s'exécuteront que
<body> lorsqu'elles seront appelées.
<p>Citation:<script>EcrireQuoteOfDay()</script></p>
</body> La fonction EcrireQuoteOfDay() est
</html> appelée, elle s'exécute.
1.1.2.1 Code
Un code est une suite d'instructions simples qui s'exécutent les unes après les autres : l'ordre des
lignes détermine l'ordre d'exécution.
Dans le code suivant, on place le nombre 5 dans une variable a (un espace de stockage une zone de
mémoire), puis le nombre 6 dans la variable b et enfin, on demande à JavaScript d'afficher le résultat
de l'addition des deux variables.
<script> 1 placer 5 dans a
a = 5
b = 6 2 placer 6 dans b
document.write(a+b)
</script> 3 afficher calculer a + b
1.1.2.2 Fonction
Une fonction est une suite d'instructions simples dans un bloc nommé. Les instructions ne peuvent se
lancer que si le bloc est demandé par quelqu'un. De plus, une fonction peut recevoir des paramètres,
qu'elle peut placer dans des variables choisies par le développeur de la fonction.
On peut considérer une fonction comme le nom d'une instruction complexe qui exécute plusieurs
instructions simples.
<script> 1 Préparer un code :
function addition(a, b) {
document.write(a+b) Addition ( a , b )
}
afficher calculer a + b
addition(5, 6)
addition(18, 2)
addition(-7, 7.5) 2 addition placer 5 , placer 6
</script>
3 addition placer 18, placer 2
L'intérêt est surtout de pouvoir appeler plusieurs fois le 4 addition placer -7, placer 7.5
même code, en utilisant le même nom.
images = []
images[0] = "http://david.roumanet.free.fr/images/einstein.jpg"
images[1] = "http://david.roumanet.free.fr/images/confucius.jpg"
images[2] = "http://david.roumanet.free.fr/images/chucknorris.jpg"
images[3] = "http://david.roumanet.free.fr/images/einstein.jpg"
images[4] = "http://david.roumanet.free.fr/images/twain.jpg"
images[5] = "http://david.roumanet.free.fr/images/jefferson.jpg"
// Choisir un nombre aléatoire inférieur à la taille du tableau Le \ est un caractère spécial
index = Math.floor(Math.random() * quotes.length) d’échappement. Voir plus bas.
document.write("<p>\"" + quotes[index] + "\"</p>\n")
document.write("<p><img src=\"" + images[index] + "\"></p>\n")
}
Le caractère d'échappement indique à JavaScript que le caractère qui le suit doit être affiché tel quel,
ou bien que le caractère sera une commande :
\" Affiche " \n Passe à la ligne
\' Affiche ' \t Affiche une tabulation
\\ Affiche \
Ainsi, dans l'exemple ci-dessus, le code HTML pour afficher une image serait :
<p><img src="monImage.jpg"></p>
Malheureusement, nous souhaitons écrire une variable JavaScript qui est délimité par des doubles
quotes. Le code JavaScript suivant :
document.write("<p><img src=" + images[index] + "></p>")
Affichera ce code (ou il n'y a plus de double quote) dans le fichier HTML :
<p><img src=monImage.jpg></p>
Bien que la plupart des navigateurs soient capables de gérer ce nom de fichier, ce code ne
fonctionnera plus si le nom du fichier transmis contient un espace.
fonctionne Ne fonctionne pas
<p><img src="monImage.jpg"></p> <p><img src=mon Image.jpg></p>
<p><img src="mon Image.jpg"></p>
<p><img src=monImage.jpg></p>
Voilà pourquoi il faut utiliser \" qui indique à JavaScript que le caractère après \ doit être affiché tel
quel.
Appel JS Appel JS
2 JAVASCRIPT
Un langage de programmation dispose d'une syntaxe, de mot-clés réservés, et d'une logique
d'utilisation.
En tant que développeur, vous devez apprendre ce langage, comme vous apprendriez une nouvelle
langue.
<script language="JavaScript">
document.write("<h1>Hello World</h1>")
document.write("<h2>exemple en javascript</h2>")
document.write("<p>Le texte peut dépasser une ligne ") Écrit un code HTML à
document.write("car il n'y a pas de retour chariot ") l'emplacement de l'appel du
document.write("(CR) mais il faut mettre les balises ") script.
document.write("HTML : la page sera correcte.</p>")
</script>
C'est une méthode un peu longue et l'instruction document.write() n'est que très rarement employée
mais cela permet de comprendre le principe d'une page web !
float double
232 264
Ici, la variable 'full' sera égale à "ROUMANET David" car JavaScript effectue la concaténation de
"ROUMANET" avec " " et "David".
Les guillemets ne sont que des délimiteurs, donc on ne les ajoute pas !
Ici, c sera égal à 7.5 car JavaScript effectue d'abord la multiplication, puis l'addition.
Le résultat affiché sera 52.25 car JavaScript décide de convertir le nombre a en chaîne de caractère :
en effet, l'opérateur + est ici interprétée comme une concaténation de chaîne.
Le résultat sera cette fois 11.25 car l'opérateur * est considéré comme une multiplication : JavaScript
va convertir automatiquement le contenu de la chaîne. Le script ci-dessous renvoie une erreur :
<script language="JavaScript"> JavaScript sait que * n’a qu’une
a = 5 signification : il n’arrive pas à convertir la
chaîne en nombre.
b = "Jojo"
c = a * b C n’est pas un nombre, JavaScript
document.write(c) affichera NaN (Not a Number).
</script>
B o n j o u r
On peut aussi convertir toutes les lettres en majuscules ou minuscules, grâce aux fonctions
toUpperCase() ou toLowerCase() :
let salut = "Bonjour"
let salutMaj = salut.toUpperCase() // salutMaj contient "BONJOUR"
let salutMin = salut.toUpperCase() // salutMin contient "bonjour"
Enfin, il est possible de convertir des textes en mots ou groupes dans des tableaux, si on connaît le
séparateur. Par exemple :
let salut = "Bonjour les amis"
let tableau = salut.split(' ') // utilise l'espace pour trouver les mots
console.log(tableau[2]) // affichera 'amis'
2.4.1 Nommage
Les variables peuvent prendre presque n'importe quel nom si elle ne commence pas par un chiffre.
nomVariable-10
Utilise la notation
'camel case'
Par convention internationale, on utilise des noms de variables en anglais, sans accents ou
symboles particuliers qui n'existe pas ailleurs.
2.4.2 Contenu
Les variables JavaScript peuvent contenir des objets, mais pour le moment, nous nous intéressons
qu'à deux sortes de contenu :
Les textes Les nombres
Dans le cas d'une opération mathématique sur une variable texte, JavaScript essaye de la convertir
en nombre.
Dans le cas d'une addition entre une variable texte et une variable numérique, JavaScript convertit
la variable numérique en chaîne de caractères et concatène l'ensemble.
BTS SIO SI4
SI4 - 04 cours JavaScript
Il faut toutefois être vigilant dans le parcours du tableau : la première cellule commence à l'index
zéro !
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9 10
BATMAN SUPERMAN CATWOMAN AQUAMAN
Mais JavaScript utilise des tableaux dynamiques, il est possible d'augmenter la taille sans s'inquiéter
de la taille initiale. JavaScript a une vision assez laxiste, que l'on ne trouve pas en C# ou Java.
Il existe un moyen d'ajouter à la fin du tableau, en utilisant push()
let fruits = ["Banana", "Orange", "Apple", "Mango"]
fruits.push("Kiwi")
// initialisation du tableau
let marques = ['BMW', 'Peugeot', 'Tesla', 'Volvo', 'Volkswagen']
marques.pop() // supprime Volkswagen
marques.splice(0,1) // supprime BMW et Peugeot
for (let index=0 ; index < marques.length ; index++) {
document.write("[" + marques[index] + "] ");
}
// affichera [Peugeot] [Tesla] [Volvo]
MonTableau.length
0 1 2 3 4 5
Citron Fraise Cassis Mangue cerise
pop()
sorbets[2] = 'cassis'
sorbets.push('kiwi')
La structure du tableau est en réalité celle d'un tableau de 4 cellules, contenant chacune 2 cellules :
0 1 2 3
0 1 0 1 0 1 0 1
Peugeot 80 Fiat 110 Renault 105 Citroen 180
L'accès aux données se fera avec les indices habituels : le premier paramètre correspond à l'indice de
la cellule qui contient le mini-tableau, le deuxième argument est l'indice dans le "sous-tableau".
Exemple pour la troisième vente :
venteMarque = vente[2][0] // renvoie Renault
venteNombre = vente[2][1] // renvoie 105
Il s'agit de tableaux imbriqués et ils sont proches des objets. Ils sont également proches des tableaux
associatifs. Un tableau associatif est une association d'une clé et d'une valeur (donc 2 dimensions). Ici
la clé doit être unique et la paire clé-valeur séparée par une virgule. Le séparateur entre la clé et la
valeur est le symbole' : '. Enfin, les valeurs ne sont pas forcément un nombre.
CodePostal = {"Paris":75000, "Lyon":69000, "Grenoble":38000}
// une méthode !
"puissanceCh" : function() {
return this.puissanceWatt * 1.36
}
};
La boucle forEach fait appel aux fonctions anonymes ou fonctions fléchées (programme SIO2).
const tableau = [0,5,10,15,20]
tableau.forEach(elm => document.write('['+elm+']'))
// affichera [0][5][10][15][20]
Pour en savoir plus, https://www.hugopich.com/fr/javascript-foreach/
La boucle précédente peut ne jamais s’exécuter – par exemple, si le tableau est vide – ce qui évitera
un plantage du programme ; En revanche, si l’action est à faire une fois au moins, Il existe également la
boucle do/While (la condition est testée après le code à exécuter).
do {
// code a exécuter
} while (condition) ;
2.8.1 If … else
if (age > 21) {
text = "Majeur tout pays"
autorisation = true
} else if (age > 18) {
text = "Majeur France"
autorisation = true
} else {
text = "Mineur"
autorisation = false
}
Il est également possible d'utiliser une forme abrégée dans le cas de tests ayant une seule action par
possibilité :
text = (age < 18) ? "Trop Jeune" : "Majeur" ;
Action fausse
Action vraie
condition
function auCarre(nombreA) {
return nombreA * nombreA ;
}
JavaScript étant inspiré de Java, on trouve également l’usage de constructeur et l’instanciation d’objet.
<SCRIPT LANGUAGE="JavaScript">
let maintenant=new Date();
document.write(maintenant);
</SCRIPT>
screen.width et screen.height Donne la résolution de l’écran. Méthode dépréciée (mais utile pour les
screen.colorDepth hackers).
Exemple ► 1920x1080
champA champB
2.10.5.1 document.getElementById
C'est la méthode la plus rapide
let leNombre = Number(document.getElementById("champA").value) //lecture
document.getElementById("champB").value = "15" //modification
2.10.5.2 document.querySelector
Cette méthode est moins rapide mais s'applique sur tout le DOM (et pas seulement à partir du nœud
"document"). De plus, comme querySelector() s'applique à tous les attributs, il faut faire précéder le
champ recherché par un '.' pour une classe et un '#' pour un ID.
let leNombre = Number(document.querySelector("#champA").value) //lecture
document.querySelector("#champB").value = "15" //modification
Il est également possible de modifier le style CSS d'un élément. Par exemple, lors du survol de cet
élément (cet exemple permet également de voir deux événements associés au même élément) :
<span onmouseover="this.style.color='red'" onmouseout="this.style.color='black'">Mouse
over me!</span>
Dans cet exemple, le texte s'affichera en rouge lorsque la souris sera au-dessus, et reprendra une
couleur noire à sa sortie.
<script>
let leCanevas = document.getElementById("maZone");
if (leCanevas.getContext) {
dessin = leCanevas.getContext("2d");
document.getElementById("TXT").innerHTML = leCanevas;
dessin.strokeStyle = "#002277";
dessin.strokeRect(0,0,499,399);
dessin.fillRect(50,50,400,300);
dessin.stroke();
// Face
dessin.beginPath();
dessin.lineWidth = 15;
dessin.fillStyle = "#AA8800";
dessin.arc(250,200,120,0,2*Math.PI);
dessin.fill();
dessin.stroke();
// smile and eyes
dessin.beginPath();
dessin.lineWidth = 5;
dessin.arc(250,200,80,Math.PI, 0, true);
dessin.stroke();
dessin.beginPath();
dessin.arc(200,150,30,0,2*Math.PI);
// oubli volontaire du beginPath()
dessin.arc(300,150,30,0,2*Math.PI);
dessin.stroke();
// Titre du dessin
dessin.font = '40pt Calibri';
dessin.fillStyle = 'grey';
dessin.fillText('Hello World!', 130, 60);
}
</script>
</body>
</html>
Le dessin est très rudimentaire et est composé de trait, d'arc, de rectangle et de texte. Il est aussi
possible d'afficher une image. Des opérations de rotations et de transformations sont également
disponibles.
Il faut comprendre que la zone de dessin commence aux coordonnées 0,0 en haut à gauche de la
zone.
Pour les cercles et arcs de cercle, le tracé se fait par défaut dans
le sens horaire (sauf si le paramètre N°6 de la fonction arc() est
mis à true).
Les angles sont exprimés en radians (un tour = 2π).
Enfin, pour le même tracé, il est possible de lui appliquer le tracé de ligne ET le remplissage en
utilisant de manière consécutive fill() et stroke().