Chapitre 2
LE LANGAGE JAVASCRIPT
 
 
Précédent Suivant
 

Le langage JavaScript
JavaScript ou ECMAScript ?
* Standard ECMAScript
* Défini par l'organisme ECMA
* European Computer Manufacturers Association
* Organisme de standardisation pour l'informatique
* Langages reposant sur ce standard
* JavaScript
* Développé par Netscape
* JScript
* Développé par Microsoft
* ActionScript
* Développé par Adobe
* Par abus de langage, on utilise le terme JavaScript
* Aucun rapport avec le langage Java
* Langage de script
* Permet la manipulation simple d'objets
* En particulier, les objets qui composent une page Web
Portabilité du code JavaScript
* Important qu'un code JavaScript soit portable
* Destiné à être exécuté sur n'importe quelle machine
* Mauvaise exécution ==> mauvais affichage de votre site
* Problèmes de compatibilité entre les navigateurs
* Malgré le standard, différences entre les implémentations
* Evolution du standard ==> différences entre les versions du langage
* Pour un développement propre
* Développer selon le standard de l'ECMA
* Tester vos scripts avec différents navigateurs
* Conseils sur les navigateurs à tester
* Mozilla Firefox
* Dernière version
* Utilisateurs souvent à jour
* Internet Explorer
* Idéalement, versions 6 et 7
* Utilisateurs pas toujours à jour
* Beaucoup d'incompatibilités détectées de cette manière
Langage JavaScript
* Inclusion dans code HTML
* <script type="text/javascript">...</script>
* Syntaxe similaire à Java
* Instructions terminées par ";"
* Commentaires
* "//" pour une seule ligne
* "/*...*/" pour plusieurs lignes
* Opérateurs identiques
* Structures de contrôle identiques
* Sensible à la casse
* Variables faiblement typées
* Pas de type prédéfini
* Type peut changer en cours d'exécution
* Manipulation d'objets prédéfinis
* Accès à l'objet navigateur
* Accès à l'objet fenêtre
* Accès au document et à ses composants
Variables (1/2)
* Déclaration implicite
* nom_variable = valeur;
* Portée illimitée de la variable
* Variable globale
* Accessible de n'importe où
* Déclaration explicite
* Utilisation du mot-clé "var"
* var nom_variable = valeur;
* Portée de la variable limitée au bloc d'instructions
* Bloc d'instructions = zone entre "{" et "}"
* En dehors de tout bloc = variable globale
* Dans le bloc d'une fonction = variable locale
* Conseil: toujours utiliser "var" pour la déclaration
Variables (2/2)
* Exemple de manipulation de variables
var a = 7;
var b = 3;
function fois2(n) {
var a = 2 * n;
return a;
}
document.write("Double de " + b + " = "
+ fois2(b));
document.write("Valeur de a = " + a);
* Résultat de l'exemple
Double de 3 = 6
Valeur de a = 7
* Modification de la fonction
function fois2(n) {
a = 2 * n;
return a;
}
* Résultat avec la modification
Double de 3 = 6
Valeur de a = 6
Types de données
* Variable sans type de données au moment de sa déclaration
* var x; ==> type inconnu
* Type déterminé à l'initialisation de la variable
* Booléen
* x = true;
* x = false;
* Entier
* x = 27;
* Flottant
* x = 27.13;
* Chaîne de caractères
* x = "Nawouak";
* x = "27";
* Le type d'une variable peut changer en cours d'exécution
var x = 5;
...
x = "cinq";
Opérateurs
* Opérateurs classiques
* Arithmétique: +, -, *, /, %
* Incrémentation / décrémentation: --, ++
* Affectation: =, +=, -=, *=, /=, %=
* Logique: && (et), || (ou), ! (non)
* Comparaison: ==, <, >, <=, >=, !=
* Chaînes de caractères
* Délimiteurs: ' ou "
* Opérateur de concaténation: +
* Permet de fusionner deux chaînes
* var nom = "Nawouak";
chaine = "Bonjour " + nom;
* chaine = "Bonjour ";
chaine += nom;
* chaine = "Bonjour Nawouak"
Structures de contrôle (1/4)
* Bloc d'instructions délimité par "{" et "}"
* Facultatif si une seule ligne
* if (x == 1) y = 2; ? if (x == 1) { y = 2; }
* Structures conditionnelles
* if (test1) action1
else if (test2) action2
else action3
* switch (variable)
case value1: action1
case value2: action2
default: action3
* Structures de boucle
* while (test) action
* do action while (test)
* for (depart; test; suivant) action
Structures de contrôle (2/4)
* Exemple: coût à partir d'un volume d'essence
* Version 1
if (litres < 0) {
etat = "negatif";
litres = 0;
}
else {
if (litres == 0) { etat = "nul"; }
else { etat = "positif"; }
}
document.write("Etat de la variable: " + etat);
cout = litres * prix;
* Version 2
if (litres < 0) {
etat = "negatif";
litres = 0;
}
else if (litres == 0) { etat = "nul"; }
else { etat = "positif"; }
Structures de contrôle (3/4)
* Exemple: conversion d'un chiffre en lettres
* Version avec "if" imbriqués
if (x == 1) texte = "un";
else if (x == 2) texte = "deux";
...
else if (x == 9) texte = "neuf";
else texte = "zéro";
* Version avec "switch"
switch (x) {
case 1: texte = "un"; break;
case 2: texte = "deux"; break;
...
case 9: texte = "neuf"; break;
default: texte = "zéro";
}
Structures de contrôle (4/4)
* Exemple: somme des 9 premiers entiers
* Calcul avec boucle "for"
var s = 0;
for (var i = 0; i < 10; i++) { s += i; }
* Calcul avec boucle "while"
var s = 0;
var i = 0;
while (i < 10) { s += i; i++; }
* Calcul avec boucle "do...while"
var s = 0;
var i = 0;
do { s += i; i++; } while (i < 10);
Chaînes de caractères (1/2)
* Comment mettre un délimiteur dans une chaîne ?
* "comment mettre "un" entre guillemets ?"
* Plusieurs possibilités
* Alternance des délimiteurs "'" et """
* 'Voila comment mettre "un" entre guillemets ?'
* Rendre les délimiteurs inopérants avec "\"
* "Voila comment mettre \"un\" entre guillemets ?"
* Exemple: générer le code HTML d'une image
* Code HTML à générer
* <img src="nawouak.gif"/>
* Nom de l'image dans une variable
* image = "nawouak.gif";
Chaînes de caractères (2/2)
Tableaux simples (1/2)
* Déclaration d'un tableau
* var tab = new Array();
* Remplissage d'un tableau
* Numérotation des indices commence à 0
* tab[0] = "lundi";
tab[1] = "mardi";
...
tab[6] = "dimanche";
* Déclaration accélérée
* var tab = new Array("lundi",...,"dimanche");
* Connaître le nombre d'éléments
* nb = tab.length;
Tableaux simples (2/2)
* Parcours des éléments
* Code JavaScript
document.write("<p>Il y a " + tab.length + " jours");
document.write(" dans une semaine:</p>");
document.write("<ul>");
for (var i = 0; i < tab.length; i++) {
document.write("<li>jour no " + (i+1) + ": ");
document.write(tab[i] + "</li>");
}
document.write("</ul>");
* Code HTML généré
<p>Il y a 7 jours dans une semaine:</p>
<ul>
<li>jour no 1: lundi</li>
<li>jour no 2: mardi</li>
...
<li>jour no 7: dimanche</li>
</ul>
Fonctions (1/3)
* Permettent de factoriser / réutiliser du code
* Portions de code associées à un nom
* Reçoivent des arguments en entrée
* Retournent une valeur en sortie
* function nom(arguments) {
action;
return resultat;
}
* Exemple
function produit(a,b) {
var p = a * b;
return p;
}
Fonctions (2/3)
* Déclaration: function f(x)
* Exécution: y = f(a);
* L'argument "x" est une copie de "a"
* Modification de "x" limitée à "f"
* Le retour est aussi une copie
* function produit(a,b) {
var c = a * b;
return c;
}
* w = produit(u,v);
Fonctions (3/3)
<head>
<script type="text/javascript">
var jours = new Array("lundi",...,"dimanche");
function afficher_jour(numero) {
document.write("<li>jour no " + (numero+1) + ": ");
document.write(jours[numero] + "</li>");
}
</script>
</head>
<body>
<script type="text/javascript">
document.write("<p>Il y a " + jours.length + " jours");
document.write(" dans une semaine:</p>");
document.write("<ul>");
for (var i = 0; i < jours.length; i++) afficher_jour(i);
document.write("</ul>");
</script>
</body>
Tableaux associatifs
* Tableaux indexés par des chaînes
* Association d'une clé (chaîne) à un élément
* Tableau simple: association entier-élément
* Remplissage d'un tableau
* tab["lundi"] = "Monday";
tab["mardi"] = "Tuesday";
...
tab["dimanche"] = "Sunday";
* Parcours des éléments
* Code JavaScript
for (var i in tab)
document.write("<li>" + i + " = " + tab[i] + "</li>");
* Code HTML généré
<li>lundi = Monday</li>
<li>mardi = Tuesday</li>
...
<li>dimanche = Sunday</li>