Le Langage Java Script
Le Langage Java Script
Motivation :
Faculté de génie électrique et informatique L2 Java script est un langage incontournable du développement web.
Département d’informatique Année : 2022/2023
Module : Développement Web
Le JavaScript est aujourd’hui l’un des langages de programmation les plus populaires et il
fait partie des langages web dits « standards » avec le HTML et le CSS.
Les bases du langage Il a été crée Par Brendan Eich, en 1995, à Netscape Communication Corporation (éditeur de
Netscape Navigator) ;
JavaScript Son premier nom était LiveScript, il est inspiré du Langage Java
JavaScript Java
Pourquoi le nom JavaScript? • Créé par la société Netscape • Créé originellement par Sun
(dec 1995) Microsystems (mai 1995);
JavaScript Comparaison entre Syntaxe dérivée du C/C++ Syntaxe dérivée du C/C++
Et Concepts fondamentaux complètement différents et servent à
JavaScript et Java
Java effectuer des tâches totalement différentes.
Langage interprété : Langage compilé :
Java créé originellement par Sun Microsystems; Partenaires + •Pas de compilation. •Compilation vers du ByteCode.
le Java était de plus en plus •Exécution directe dans un •Exécution nécessite machine
JavaScript créé par la société Netscape.
populaire interpréteur virtuelle Java.
•Typage dynamique. •Type statique.
•Plus de souplesse mais moins de •Contrôles à la compilation,
Des raisons marketing contrôles. moins souple mais plus robuste.
•Modèle objet à base de •Modèle objet à base de Classes.
Prototypes •Un langage impératif.
•Un vrai langage fonctionnel. •lambda expressions introduites
•Les fonctions sont des objets de dans java 8 (2014)
3
1er ordre. 4
Caractéristiques
Langage client-side :
Le JavaScript est un langage dynamique qui permet de dynamiser une page HTML, en ajoutant des
interactions avec l'utilisateur, des animations, de l'aide à la navigation.
Le JavaScript est un langage (principalement) côté client ;
Le JavaScript est un langage interprété :
Il peut également s’utiliser côté serveur à condition
L’interpréteur est inclus dans votre navigateur Web! qu’on mette en place un environnement favorable (en
utilisant Node.js par exemple)
Internet Explorer JScript ;
Langage interprété : exécution directe sans passage
Mozilla Firefox SpiderMonkey ; par une forme intermédiaire;
Langage compilé : exécution avec passage par une
Google Chrome V8. forme intermédiaire;
5 6
1
08/05/2023
Mélanger les codes html, css et JavaScript est déconseillé est considéré comme une mauvaise pratique.
En JavaScript, il existe deux types de commentaires :
Car le web est de plus en plus complexe;
1. Les commentaires mono-ligne : on utilisera un double slash // qui sera suivi du texte de notre
commentaire.
2. Les commentaires multi-lignes : entourer le texte du commentaire avec la syntaxe /* */.
Nous devons être de plus en plus rigoureux pour exploiter cette complexité.
L’indentation en JavaScript sert à rendre son code plus lisible et donc plus simple à comprendre.
1. Plus propre;
Séparer html, css et javascript 2. Plus compréhensible; Le point virgule à la fin de chaque instruction en JavaScript : obligatoire ou non ?
3. Plus facilement maintenable.
11 12
2
08/05/2023
15 16
JavaScript langage avec typage dynamique : Parfois il peut être intéressant d'empêcher la modification d'une variable.
Type d'une variable défini qu'au moment de Possibilité de déclarer des constantes en javascript.
l'exécution ;
Utiliser const au lieu de let.
Possibilité de changer le type d'une variable
à l'exécution. Utiliser des majuscules pour les noms de constantes.
Pas obligation d'initialiser une variable à sa
Exp : const TAUX_TVA = 0.2;
déclaration.
Obligation d'initialiser la variable à sa déclaration.
Une variable non initialisée a la valeur
undefined. Une tentative de modification de la constante va provoquer une erreur d'exécution
Possibilité d'initialiser une variable à sa
avec un message explicite sur la console
déclaration à l'aide d’expressions littérales.
17 18
3
08/05/2023
Types de base :
Type d'une variable :
Types primitifs : définissent des valeurs primitives (simples) (nombres, chaînes de
caractères, booléens) qui sont stockées dans une variable.
JavaScript est un langage
dynamique : le type d'une variable number: permet de représenter les nombres
peut changer au cours de (nombre flottants double précision sur 64 bits)
l'exécution d'un programme.
NaN (Not a Number)
L’opérateur typeof permet de
Valeur rencontrée quand le résultat d’une
déterminer le type d'une variable.
opération arithmétique ne peut pas être
représentée par un nombre.
C’est la seule valeur en JavaScript qui n’est pas
19 égale à elle-même. 20
Expressions littérales pour les chaînes délimitées par des guillemets (quotes) : "ou 'ou `(backticks) undefined : undefined signifie qu’une variable a été déclarée mais qu’aucune valeur n’a
let nom = "DUPONT"; encore été attribuée.
let prenom= 'Marie Louise'; ${ … } permet d’inclure des variables et
let s1 = "Voilà l'automne"; Exp :
let s2 = 'Il a dit : "Ah bon !"'; expressions dans une chaîne
var test;
let nbHeures = 3; La valeur de l’expression est évaluée et
let s3 = `durée en secondes : ${nbHeures* 60} s`; alert(test); //affiche undefined
"durée en secondes : 180 s" son résultat devient partie de la chaîne alert(typeof test); //affiche undefined
21 22
4
08/05/2023
typeof(text) ;
25 26
27 28
> Permet de tester si une valeur est strictement supérieure à une autre Exemple:
<script>
<= Permet de tester si une valeur est inférieure ou égale à une autre
var prenom = prompt("insérer votre Prénom " , "Prénom" );
>= Permet de tester si une valeur est supérieure ou égale à une autre </script>
L’information lue
(saisie) sera stockée Boite de dialogue
dans cette variable « prompt »
29 30
5
08/05/2023
Exemple: Exemple:
<script> <script>
Exemple : Exemple:
var etage = parseInt (prompt ("Entrez l'étage où l'ascenseur doit se rendre (de -2 à 30) :"));
<html>
<head> if (etage == 0) {
<title>Ecrire dans la fenêtre </title> alert('Vous vous trouvez déjà au rez-de-chaussée.');
</head> } else if (-2 <= etage && etage <= 30) {
<body>
alert('Direction l'étage n°" + etage + ' !');
<script language="JavaScript">
document.write('Vous avez le bonjour de JavaScript <br>'); } else {
</script> alert("L'étage spécifié n'existe pas.");
</body> }
</html>
33 34
default :
alert("Vous avez fait un choix au moins égal à 4") ;
}
35 36
6
08/05/2023
Les fonctions anonymes : Les fonctions auto invoquées : Portée (scope) d’une variable :
Les fonctions anonymes sont utilisées lorsqu’on Une fonction auto invoquée va s’invoquer (ou Portée (scope) d’une déclaration : la région du programme où l’entité déclarée (variable,
n’a pas besoin d’appeler notre fonction. s’appeler ou encore s’exécuter) elle-même dès sa objet, fonction) peut être accédée via son identifiant.
création.
En JavaScript 3 portées :
<script>
Globale: un identifiant défini dans la portée globale est accessible dans tout le script où il
var carre = function(x){ <script>
(function(x){ est déclaré.
alert('le carré de '+x+' est : '+x*x) var x=prompt('Taper un nombre : ', '5');
}; alert('le carré de '+x+' est : '+x*x) Locale: un identifiant défini localement est accessible dans tout le corps de la fonction où il
var y=prompt('Taper un nombre : ', '5'); })(); est déclaré.
carre(y); </script>
Bloc: un identifiant de variable déclarée avec let ou const défini dans un bloc ({ }) est
</script>
accessible uniquement dans le bloc (et dans tous les blocs imbriqués) où il est déclaré.
41 42
7
08/05/2023
Portée (scope) d’une variable (suite) : Portée (scope) d’une variable (suite) :
Une variable déclarée à l’intérieur d’une fonction est une variable locale à cette fonction :
Une variable déclarée à l'extérieur d’une fonction et en dehors de tout bloc est une variable globale
Créée au début de l’exécution de la fonction, détruite à la fin de son exécution ;
Toutes les fonctions du script peuvent y accéder (et y modifier).
Ne peut être accédée qu’à l’intérieur de la fonction ;
function hello1() {
Des variables avec le même nom peuvent être utilisées dans des fonctions différentes. console.log("Hello1 " + x);
}
// le code ici ne peut accéder à x // x est une variable globale elle est accessible partout
function hello1() { Variable globale let x = "World";
let x= "World";
hello1(); Hello1 World
console.log("Hello1 " + x);
} si présente cette instruction provoquerait une erreur
// le code ici ne peut accéder à x d'exécution et le reste du script ne serait pas exécuté hello2(); Hello2 3
C'est la variable x globale
console.log("Hello " + x); ReferenceError: x is not defined
console.log("x : " + x); x: 3 qui est utilisée.
Hello1 World hello1();
function hello2() { Elle a été modifiée par
Hello1 3 hello2(); Modification hello2.
x = 3;
function hello2() { Variables locales de x
console.log("Hello2 " + x);
let x= 3;
}
console.log("Hello2 " + x);
} 43 44
// le code ici ne peut accéder à x
Portée (scope) d’une variable (suite) : Portée (scope) d’une variable (suite) :
Quand une variable locale a le même nom qu'une variable globale, la déclaration locale masque la Si une valeur est affectée à une variable non déclarée, celle-ci devient automatiquement
déclaration globale. une variable globale. x n'a pas été déclarée, une
variable globale de nom
x est automatiquement créé
function hello1() { Variable function hello1() {
console.log("Hello1 " + x); globale x = 2;
} automatique console.log("Hello1 " + x);
// x est une variable globale elle est accessible partout }
Variable globale let x = "World"; // x est une variable globale elle est accessible partout
la variable locale a hello1(); Hello1 2
hello1(); Hello1 World masqué la variable
globale console.log("x : " + x); x: 2
hello2(); Hello2 3 hello2(); Hello2 3
console.log("x : " + x); x: World C'est la variable x console.log("x : " + x); x: World
function hello2() { globale qui est utilisée. function hello2() {
Variable locale let x = 3; x = x + 1;
console.log("Hello2 " + x); console.log("Hello2 " + x);
} x = "World";
}
45 46
Portée (scope) d’une variable (suite) : Portée (scope) d’une variable (suite) :
Si une variable non déclarée est lue avant d’avoir été initialisée, une erreur d’exécution est Variable not defined ≠ variable undefined
provoquée C'est la variable x
globale qui est utilisée.
Variable function hello1() {
globale x = 2;
console.log("x : " + x); ReferenceError: x is not defined
automatique console.log("Hello1 " + x);
}
console.log("x : " + x); ReferenceError: x is not defined
let x;
console.log("x : " + x); undifined
let y = 1;
Tentative de lecture alors que console.log("y : " + y); 1
la variable n’a pas été
initialisée.
47 48
8
08/05/2023
Portée (scope) d’une variable (suite) : Portée (scope) d’une variable (suite) :
En JavaScript plusieurs manières de définir des variables : var x; x déclarée, mais pas initialisée let x;
var y = 1; let y = 1;
Variables globales automatiques ; console.log("x : " + x); undefined console.log("x : " + x);
console.log("y : " + y); 1 console.log("y : " + y);
Déclaration explicite avec le mot clé var ;
Déclaration explicite avec les mots clé let et const (ES6+). ReferenceError: can't access
console.log("x : " + x); undefined console.log("x : " + x); lexical declaration `x'
console.log("y : " + y); undefined console.log("y : " + y); before initialization
var x; let x;
var y = 1; let y = 1;
var unTexte= "Hello World" ;
? let unTexte= "Hello World" ;
Les variables déclarées avec var peuvent être utilisées
avant leur déclaration ce qui n’est pas le cas avec let.
Quelle différence ? var x, y; JavaScript fait remonter les déclarations (hoist= hisser) de
console.log("x : " + x); undefined
variables faites avec var au début de la portée (scope)
console.log("y : " + y); undefined
var y = 1; courante (le script ou la fonction courante).
Seules les déclarations sont remontées, pas les
49 initialisations. 50
Permettent de repérer les éléments par une clé (qui est souvent un texte) au lieu À l’aide d’une boucle for :
let tabNombres = [1 , 3, 12 , -4, 7];
d’un index numérique.
let sommeElements = 0;
Exemple:
for (let i = 0; i < tabNombres.length ; i ++) {
let tableau = new Array(); // déclaration d'un tableau vide sommeElements = sommeElements + tabNombres [i];
tableau['nom'] = 'Moilek'; }
tableau['prenom'] = ‘Amina'; Utilisation des boucles « for .. in » :
Remarque : la propriété length ne peut pas être utilisée pour un tableau associatif. sommeElements = sommeElements + tabNombres [ index ];
}
53 54
9
08/05/2023
Les éléments d’un tableaux ne sont pas typés : Itération avec for in
let tablo = [12 , " timoleon ", true , 0, " autre "]; Ne parcourt que les éléments « définis »
let monTablo = [1 ,2]; // éléments d’indice 0 et 1 " définis "
Les tableaux sont dynamiques monTablo [3] = 4; // on " ajoute " l’élément d’indice 3
Leur Taille n’est pas figée. let somme = 0; // l’élément d’indice 2 n’existe pas
L’utilisation d’un indice suffit à définir l’élément associé.
for (let index in monTablo ) {
let monTablo = []; // monTablo est vide somme = somme + monTablo [ index ];
} // somme vaut 1+2+4 = 7
monTablo.length ; // 0
La propriété length
monTablo [0] = 1; // on " ajoute " l’élément d’indice 0
Ne correspond pas au nombre d’éléments si clairsemé
monTablo [1] = 33; // on " ajoute " l’élément d’indice 1
Est plus grand que le dernier indice « défini » vaut généralement cet indice + 1
monTablo.length ; // 2 monTablo . length ; // 3
pas de contrainte de continuité des indices, ils peuvent être « clairsemés » (sparse) (≠ « dense ») monTablo [10] = -4;
monTablo . length ; // 11
monTablo [12] = -5; // on " ajoute " l’élément d’indice 12
2 in monTablo ; // -> false ceux d’indice 2 ,... ,11 n’existent pas 55 56
Tableaux multi-dimensionnels
Il s’agit de tableaux de tableaux chacun des tableaux éléments peut avoir sa propre « taille »
Tableaux et chaînes de caractères let tt = [[1 , 2] , [3 , 4] , [5 ,6]];
tt.length ; // 3
Les chaînes de caractères se comportent comme des tableaux non mutables tt [2][0]; // 5
tt [1].length ; // 2
let s = " timoleon "; tt [0]; // [1 ,2]
s.length ; // 8 let ttt = [[ true ], ["a", "b", "c"] , [10 , -4]];
let tabMult = new Array (10) ; // 10 " lignes "
s[2]; // "m" , équivalent de s.charAt (2)
for (let i = 0; i < tabMult . length ; i ++) {
tabMult [i] = new Array (10) ; // 10 " colonnes "
for (let j = 0; j < tabMult [i].length ; j ++) {
Attention : les méthodes de l’objet Array ne sont pas accessibles. tabMult [i][j] = i*j; }
}
alert ("7 x 8 = "+ tabMult [7][8]) ; // -> "7 x8 = 56"
57 58
Les tableaux ne possèdent qu’une seule propriété : length. Les méthodes des tableaux (suite) :
Remplacer une partie d'un tableau : splice() myArray.push('Ludovic'); // Ajoute « Ludovic » à la fin du tableau myArray.push('Pauline',
'Guillaume'); // Ajoute « Pauline » et « Guillaume » à la fin du tableau
Tester l'existence d’une valeur dans tableau : includes()
Aide à parcourir les éléments du tableau : forEach()
59 60
10
08/05/2023
Deux types d’objets L'objet window : le parent de tous les objets de la page
L'objet window est un objet global qui représente la fenêtre du navigateur dans laquelle le
1. Objets natifs
document (la page Web) contenant les objets élémentaires de la page (champs de
a) Types prédéfinis : Array, String, Date, Math…
formulaire, images...) est chargé.
b) Objets liés à l'environnement d'exécution :
C'est à partir de cet objet (window) que le Javascript est exécuté.
i. window, document… dans le navigateur
ii. process… dans NodeJs Exp :
2. Objets personnalisés : Si on suppose que nous disposons d'un formulaire du nom de fo qui contient une zone de texte
Types définis par l'application. nommée login, alors le nom complet de l'objet zone de texte vu par Javascript est:
window.document.fo.login
On peut faire abstraction de l'objet window, afin de réduire la syntaxe, car le navigateur sait qu'il est là :
document.fo.login
61 62
L'objet document est un sous-objet de window, l'un des plus utilisés. document.write : Permet d’écrire directement dans la fenêtre HTML
Il représente la page Web et plus précisément la balise <html>. Exemple :
Il permet de manipuler tous les objets qui sont inclus dans le documents HTML (images,
<html>
textes, formulaires...). <head>
Nous aurons à notre dispositions des outils qui permettent de changer de fond en comble le <title>Ecrire dans la fenêtre </title>
</head>
contenu et le design d'une page d'une manière dynamique. <body>
<script language="JavaScript">
document.write('Vous avez le bonjour de JavaScript <br>');
</script>
</body>
Cet objet document et ses outils forment le DOM. </html>
65 66
11
08/05/2023
<script>
fille=open('', '', 'height=50, width=300, status=yes');
fille.document.write('<title>' + 'Titre fenetre fille' + '</title>');
fille.document.write('Texte dans la fenêtre fille');
</script>
67
12