Académique Documents
Professionnel Documents
Culture Documents
Langages web L2
Olivier Mallet
Université de Rouen
1 Introduction
2 Notions fondamentales
3 Fonctions et méthodes
4 Objets
5 Objets prédéfinis
8 Frameworks
Introduction
Dans une balise <script> (qui peut se placer dans <head> ou dans
<body> )
Code interne :
<script>
<!--
instructions en JavaScript
//-->
</script>
Code externe (allège les pages et facilite la maintenance) :
<script src = "url/script.js"></script>
Dans un attribut de gestion d’évènements
Exemple
<img src="img.jpg" alt="Image" onclick="alert(’Bonjour !’);" />
Variables
Remarque
Toute valeur est équivalente à true sauf false , 0, -0, "" , undefined, null , NaN
Remarque
Si on enlevait la première ligne de code, le résultat serait le même mais la
fonction créerait une variable globale au lieu de modifier une variable
globale existante.
Remarque
Si on enlevait la première ligne de code, le premier appel à alert afficherait
1 et le deuxième ne fonctionnerait pas car la variable globale x ne serait
pas définie.
Le mode strict
Exemple
"use strict";
x = 1; // erreur : variable non déclarée
L’opérateur let
Permet de déclarer une variable dont la portée est un bloc (6= variable
globale ou locale à une fonction)
Exemple
{
let x = 1;
}
// on ne peut pas utiliser x ici
Exemple
var x = 0;
{
let x = 1;
alert(x); // affiche : 1
}
alert(x); // affiche : 0
Olivier Mallet (Université de Rouen) JavaScript 9 / 132
Notions fondamentales
Exemple
var i = 1;
for (var i = 0 ; i < 5; i++) {
// instructions
}
alert(i); // affiche : 5
Exemple
let i = 1;
for (let i = 0 ; i < 5; i++) {
// instructions
}
alert(i); // affiche : 1
Autorisé :
Redéclarer avec var une variable déclarée avec var
Redéclarer avec let , dans un autre bloc, une variable déclarée avec let
ou var
Interdit :
Redéclarer avec let une variable déclarée avec var dans le même
contexte
Redéclarer avec let une variable déclarée avec let dans le même
contexte
Redéclarer avec var une variable déclarée avec let dans le même
contexte
Exemple
var x = 0;
var x = 1;
{
var x = 2;
}
alert(x); // affiche : 2
Exemple
let y = 0;
{
let y = 1;
alert(y); // affiche : 1
}
alert(y); // affiche : 0
Exemple
var x = 0;
let x = 1;
{
var y = 2;
let y = 3;
}
Exemple
let z = 0;
let z = 1;
{
let a = 2;
let a = 3;
}
Exemple
let b = 0;
var b = 1;
{
let c = 2;
var c = 3;
}
Constantes
Constantes : remarque
Exemple
Autorisé :
const tab = ["truc", "machin", "bidule"];
tab[1] = "chose";
Interdit :
const tab = ["truc", "machin", "bidule"];
tab = ["truc", "chose", "bidule"];
Opérateurs
Arithmétiques : +, -, *, /, %, ++, --
Logiques : &&, ||, !
Comparaison : ==,!=, ===, !==, >, <, >=, <=
Bit à bit : << (décalage à gauche), >> (décalage à droite), & (et), |
(ou), ˜ (négation), ˆ (ou exclusif)
// En binaire, 12 = 1100 et 9 = 1001
alert(12 & 9); // affiche : 8 (1000)
alert(12 | 9); // affiche : 13 (1101)
alert(12 ^ 9); // affiche : 5 (0101)
alert(~12); // affiche : -13 (1...10011)
alert(12 << 2); // affiche : 48 (110000)
alert(12 >> 2); // affiche : 3 (11)
Opérateurs (2)
Affectation : =, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ˆ=
Conditionnel : (condition) ? valeur1 : valeur2
Exemple
var statut = (age>=18) ? "majeur" : "mineur";
Conditions et boucles
if
Remarque
On peut écrire if(x) pour tester si x existe et est non vide (= équivalent à
true )
if... else
if... else if... else
switch (comparaison sur la valeur et sur le type)
for
while
do... while
break : interrompt une boucle
continue : passe à l’itération suivante d’une boucle
Olivier Mallet (Université de Rouen) JavaScript 19 / 132
Fonctions et méthodes
Fonctions
Exemple
function distance(a,b) {
if (b == undefined) {
if (a == undefined) {
return 0;
}
return distance(a,0);
}
return Math.abs(a-b); // renvoie |a-b|
}
alert(distance()); // affiche : 0
alert(distance(-5)); // affiche : 5
alert(distance(3,14)); // affiche : 11
alert(distance()); // affiche : 0
alert(distance(-5)); // affiche : 5
alert(distance(3,14)); // affiche : 11
Exemple
function addition() {
var args = addition.arguments;
var somme = 0;
for(var i=0; i<args.length; i++)
somme += args[i];
return somme;
}
addition(3, 7) renvoie 10
addition(1, 8, 4, 13) renvoie 26
Fonctions anonymes
Exemple
parseInt("3.14") // renvoie 3
parseInt("7 nains") // renvoie 7
Exemple
isNaN("123") // renvoie false
isNaN("7 nains") // renvoie true
isNaN("Bonjour") // renvoie true
Remarque
À utiliser avec discernement (problèmes de performance et de sécurité) !
Olivier Mallet (Université de Rouen) JavaScript 26 / 132
Fonctions et méthodes
Boîtes de dialogue
Exemple
var nom = prompt("Entrez votre nom", "Mon nom");
alert("Bonjour, " + nom + " !");
Plus pratique qu’un alert pour le débogage (ne bloque pas le script)
Penser à supprimer les appels à console.log avant de mettre le site
en production
Introduction
Attention !
Le fonctionnement des objets en JavaScript est particulier et différent de
celui de Java !
Exemple
function Rectangle(a, b) {
this.longueur = a; // définition d’un attribut
this.largeur = b;
Exemple
var r = new Rectangle(2, 1);
obj instanceof Objet teste si obj a été créé par le constructeur Objet
Exemple
alert(r instanceof Rectangle); // affiche : true
Olivier Mallet (Université de Rouen) JavaScript 31 / 132
Objets Création et utilisation d’objets
Le format JSON
Exemple
var txt = ’{"prenom":"Jean","nom":"Dupont","age":42}’;
var qqn = JSON.parse(txt);
alert (qqn.nom); // affiche : Dupont
Exemple
var qqn = {prenom:"Jean",nom:"Dupont",age:42};
var txt = JSON.stringify(qqn);
alert (txt); // affiche : {"prenom":"Jean","nom":"Dupont","age":42}
for (var prop in obj) : boucle sur les propriétés de l’objet obj
À chaque étape de la boucle :
prop est une chaîne de caractères qui contient le nom de la propriété
obj[prop] contient la valeur correspondante
Remarque
La notation obj[prop] peut s’utiliser même en dehors d’une boucle for :
qqn["age"] est équivalent à qqn.age .
longueur : 5
largeur : 3
surface : function () {
return (this.longueur) * (this.largeur);
}
Olivier Mallet (Université de Rouen) JavaScript 38 / 132
Objets Création et utilisation d’objets
Exemple (On ajoute à tous les rectangles une méthode qui calcule le
périmètre)
Rectangle.prototype.perimetre = function() {
return 2 * (this.largeur + this.longueur);
}
L’objet Array
Remarque
Dans les 3 cas, f prend 3 arguments :
valeur de la case
indice de la case
tableau
Pour find et findIndex , f renvoie un booléen
Tableaux : exemple
Exemple
var tab = [7,2,5,1,8,4,6,3];
alert(tab.join(";"));
// affiche : 7;2;5;1;8;4;6;3
alert(tab.slice(2,5).join(";"));
// affiche : 5;1;8
alert(tab.pop()); // affiche : 3
tab.push(11,9,10);
alert(tab.join(";"));
// affiche : 7;2;5;1;8;4;6;11;9;10
tab.reverse();
alert(tab.join(";"));
// affiche : 10;9;11;6;4;8;1;5;2;7
Exemple
// rappel : tab contient 10;9;11;6;4;8;1;5;2;7
tab.sort(function(a, b) {
if (a < b)
return -1;
else if (a > b)
return 1;
else
return 0;
});
alert(tab.join(";"));
// affiche : 1;2;4;5;6;7;8;9;10;11
Exemple
var tab = [1,2,5,14,42];
function auMoins10(valeur,indice,tableau) {
return valeur >= 10;
}
alert(tab.find(auMoins10)); // affiche : 14
alert(tab.findIndex(auMoins10)); // affiche : 3
Exemple
var tab2 = [4,8,15,16,23,42];
function ajouterCarre(valeur,indice,tableau) {
chaine += valeur * valeur + " ";
}
tab2.forEach(ajouterCarre);
alert(chaine); // affiche : 16 64 225 256 529 1764
L’objet Date
alert(d.getDay()); // affiche : 6
alert(d.getDay()); // affiche : 3
La fonction setTimeout
setTimeout(message, 5000);
La fonction setInterval
setInterval(horloge, 1000);
L’objet Math
Exemple
alert(Math.ceil(3.14)); // affiche : 4
alert(Math.floor(2.718)); // affiche : 2
alert(Math.round(1.618)); // affiche : 2
alert(Math.cos(2*Math.PI));
// affiche : 1
alert(Math.random());
// affiche un nombre entre 0 et 1
L’objet String
Exemple
var ch = "Bonjour";
alert(ch.indexOf("jour"));
// affiche : 3
alert(ch.replace("o","()"));
// affiche : B()nj()ur
alert(ch.substring(0,2));
// affiche : Bo
alert(ch.toUpperCase());
// affiche: BONJOUR
L’objet RegExp
Intérêt : vérification de format d’une donnée textuelle, recherche et
remplacement de motifs
Création : var reg = /motif à rechercher/options; ou var
reg = new RegExp("motif a rechercher","options");
Utilisation : reg.test(ch) teste si ch contient le motif de reg
Exemple
var reg = /jour/; // ou var reg = new RegExp("jour");
alert(reg.test("Bonjour")); // affiche : true
Opérateur « ou » : |
Exemple
var reg = /jour|soir|nuit/;
alert(reg.test("Bonjour")); // affiche : true
alert(reg.test("Bonne nuit")); // affiche : true
Exemple
alert(/[A-Z]/.test("il n’y a que des minuscules")); // affiche : false
alert(/[0-9A-F]/.test("color: #BC05A9")); // affiche: true;
Exemple
/Bonj(ou)+r/ trouve les mots « Bonjour », « Bonjouour »,
« Bonjououour ». . .
/Mon amie?/ est équivalent à /Mon ami|Mon amie/
Numéro de téléphone français sans séparateur : /0[1-9][0-9]{8}/
Olivier Mallet (Université de Rouen) JavaScript 62 / 132
Objets prédéfinis RegExp (expressions régulières)
Exemple
/[-a-z.\\]/ : un tiret, une minuscule, un point ou un antislash
Exemple
var phrase = "J’habite à Rouen";
/^J’habite à (\S+)$/.exec(phrase);
alert(RegExp.$1); // affiche : Rouen
Exemple
var url = prompt("Entrez l’adresse de votre site web");
if (/http:\/\/www\.([a-z0-9]+)\.([a-z]{2,4})/.test(url)) {
alert("Domaine : " + RegExp.$1
+ " ; extension : " + RegExp.$2);
}
else {
alert("Adresse invalide !");
}
Les cases du tableau renvoyé par la méthode exec (autres que la première)
contiennent les motifs capturés par les couples de parenthèses
Exemple
var reg_url = /http:\/\/www\.([a-z0-9]+)\.([a-z]{2,4})/;
var url = "http://www.exemple.com";
var tab = reg_url.exec(url);
alert(tab.join(" ; "); // affiche : http://www.exemple.com ; exemple ; com
Exemple
var phrase = "Bonjour Jean ! Bonjour Claire !"
phrase2 = phrase.replace(/Bonjour/g, "Salut");
alert(phrase2); // affiche : Salut Jean ! Salut Claire !
DOM et JavaScript
Remarque
De nombreuses fonctions telles que alert, clearInterval,
clearTimeout, confirm, prompt, setInterval, setTimeout. . . sont
des méthodes de window (mais on ne les préfixe pas)
Exemple
Code HTML :
<p id="ex">Un paragraphe <a href="toto.html">avec un lien</a></p>
Code JS :
var ex = document.getElementById("ex");
alert(ex.innerHTML);
// affiche : Un paragraphe <a href="toto.html"> avec un lien</a>
alert(ex.textContent);
// affiche : Un paragraphe avec un lien
Remarque
Les objets de type nœud de texte ont un attribut nodeValue, qui permet
d’accéder à leur contenu textuel.
DOM : exemple
<ol id="sommaire"></ol>
<h2>Introduction</h2>
<p>Bla bla</p>
<h2>Me contacter</h2>
<p>olivier.mallet@univ-rouen.fr</p>
var li = document.createElement("li");
li.appendChild(texte);
Évènements : exemple
Exemple
<html>
<head>
<title>Exemple JavaScript</title>
<script>
function message() {alert("Belle image, n’est-ce pas ?");}
</script>
</head>
<body>
<p>
<img src="cool.jpg" alt="Image" onmouseover="message();" />
</p>
</body>
</html>
Exemple
var truc = document.getElementById("toto");
truc.onclick = function(){alert("C’est à quel sujet ?");};
Exemple
var truc = document.getElementById("toto");
truc.addEventListener("click", function(){
alert("C’est à quel sujet ?");});
Exemple
truc.onclick = function(){};
Attention !
Ça ne marche que si fonc n’est pas une fonction anonyme !
Exemple
function fonc() {alert("OK");}
truc.addEventListener("click", fonc);
truc.removeEventListener("click", fonc);
Exemple
truc.addEventListener("click", function(e){
alert("Tu as cliqué en "+e.clientX+","+e.clientY);});
JavaScript et CSS
Exemple
Code HTML :
<p id="truc" class="important difficile surprenant">Attention !</p>
Code JS :
var truc = document.getElementById("truc");
alert(truc.classList.length); // affiche : 3
alert(truc.classList.contains("difficile")); // affiche : true
truc.classList.add("machin");
truc.classList.remove("important");
truc.classList.replace("surprenant", "bizarre");
truc.classList.toggle("important");
truc.classList.toggle("difficile");
// la liste contient : bizarre, machin, important
Exemple
Résultat :
ctx.beginPath();
ctx.moveTo(50,50);
ctx.lineTo(100,100);
ctx.lineTo(50,150);
ctx.lineTo(150,100);
ctx.closePath();
ctx.stroke();
Exemple
Résultat :
ctx.beginPath();
ctx.moveTo(50,50);
ctx.lineTo(100,100);
ctx.moveTo(50,150);
ctx.lineTo(150,100);
ctx.stroke();
Exemple
Résultat :
ctx.beginPath();
ctx.moveTo(50,50);
ctx.lineTo(100,100);
ctx.lineTo(50,150);
ctx.lineTo(150,100);
ctx.fill();
Exemple
ctx.lineWidth=20;
ctx.beginPath(); Résultat :
ctx.moveTo(50,50);
ctx.lineCap="square";
ctx.lineTo(50,150);
ctx.beginPath();
ctx.stroke();
ctx.moveTo(150,50);
ctx.lineTo(150,150);
ctx.lineCap="round";
ctx.stroke();
ctx.beginPath();
ctx.moveTo(100,50);
ctx.lineTo(100,150);
ctx.stroke();
Exemple
ctx.beginPath();
ctx.moveTo(50,70);
ctx.lineTo(100,30); Résultat :
ctx.lineTo(150,70); ctx.lineJoin="bevel";
ctx.stroke(); ctx.beginPath();
ctx.moveTo(50,170);
ctx.lineJoin="round"; ctx.lineTo(100,130);
ctx.beginPath(); ctx.lineTo(150,170);
ctx.moveTo(50,120); ctx.stroke();
ctx.lineTo(100,80);
ctx.lineTo(150,120);
ctx.stroke();
Exemple
ctx.lineWidth=2;
ctx.beginPath();
ctx.arc(100, 100, 80, Math.PI/2, 3*Math.PI/2, false);
ctx.moveTo(160,100);
ctx.arc(100, 100, 60, 0, Math.PI, true);
ctx.stroke();
Résultat :
ysrc
xsrc hsrc ydst
source destination
lsrc xdst hdst
ldst
Exemple
var img = document.querySelector("img[src=’html5.png’]");
Sans redimensionnement :
ctx.drawImage(img, 10, 50);
Avec redimensionnement :
ctx.drawImage(img, 0, 0, 200, 200);
Écrire du texte
Exemple
ctx.font = "12pt Arial";
Exemple
ctx.lineWidth=2;
ctx.font = "italic bold 40pt Arial,Helvetica,sans-serif";
ctx.strokeText("C’est",10,50);
ctx.fillText("beau",70,150);
Résultat :
Remarque
Au contexte est associée une pile d’états graphiques :
save empile l’état graphique actuel
restore dépile l’état graphique situé en haut de la pile et l’applique
Transformations : exemple
Exemple
function morceau() {
ctx.beginPath(); Résultat :
ctx.moveTo(0,0);
ctx.lineTo(80,40);
ctx.lineTo(40,0);
ctx.lineTo(80,-40);
ctx.fill();
}
ctx.translate(100,100);
for(var i=0; i<4; i++) {
morceau();
ctx.rotate(Math.PI/2);
}
Exemple
Résultat :
ctx.save();
ctx.translate(60, 30);
ctx.fillStyle = "blue";
ctx.fillRect(0, 0, 130, 50);
ctx.restore();
ctx.fillRect(0, 0, 120, 40);
Exemple
localStorage.setItem("prenom","Jean");
/* la ligne suivante peut être exécutée lors d’une
session ultérieure */
alert("Salut, " + localStorage.getItem("prenom") + " !");
// affiche : Salut, Jean !
Avantages :
rapidité de démarrage
concision du code (normes d’écriture, bibliothèques)
compatibilité avec les navigateurs
communauté de développeurs
prix faible ou nul
Inconvénients :
poids des bibliothèques de fonctions
code difficile à lire pour un non-initié
failles de sécurité (mises à jour nécessaires)
risques d’abandon
JQuery
ou plus simplement :
$(function(){
// code DOM
});
Exemple
Code HTML :
<p class="truc">Un paragraphe</p>
<p class="truc machin">Un autre</p>
<p class="bidule">Encore un autre</p>
Code JS :
$("p").addClass("chose"); // tous ont la classe chose
$(".truc").removeClass("machin"); // plus aucun n’a la classe machin
$("p").toggleClass("bidule"); // seuls le 1 et le 2 ont la classe bidule
Olivier Mallet (Université de Rouen) JavaScript 122 / 132
Frameworks
*
h1
h1,h2
#monid
.maclasse / p.maclasse
sélecteurs d’attributs
p a/p > a
h1 + h2 / h1 ˜ h2
pseudo-classes hiérarchiques (:nth-child(), :nth-of-type. . . )
:not(s)
Exemple
$(".truc").css("color","red").filter(":even").
css("background-color","yellow");
Exemple
$("#bouton1").css("font-weight","bold").
css("font-style","italic").html("Cliquez ici").
off("click").on("click",maFonction);
Exemple
function message2 {alert("OK");}
$("#bouton").on("click", message2);