nombre 1
nombre 2
Résultat
nombre 1 | |
nombre 2 | |
Résultat |
Plusieurs solutions :
script
<script type="text/javascript"> ... code javascript </script>(à réserver à du code court et non réutilisable)
<script type="text/javascript" src="monSource.js"></script>
<button onclick="alert('click !')">clickez moi</button>
Le code JavaScript est une suite d'instructions, dont certaines peuvent être des déclarations de fonctions ou des affectations.
Les instructions sont séparées par des passage à la ligne ou par le caractère ";"
On suggère d'utiliser systématiquement ";", mais le passage à la ligne reste toujours un séparateur
On peut écrire :euros= 6.56* francs; alert(euros);ou
euros= 6.56* francs alert(euros)ou
euros= 6.56* francs; alert(euros);
var
:
<script type="text/javascript"> var a; </script>Notez que ça ne fixe pas son type pour autant.
null
et undefined
.noter l'absence d'un type caractère !
on dispose entre autres des opérateurs +, -, *, /, % (modulo)
note : pour la division euclidienne de x par y, on fera :
q= Math.floor(x/y);(Math.floor() calcule la partie entière).
Quand un calcul donne un résultat infini, on a une valeur spéciale : Infinity
a= -1/0; alert (a==-Infinity); // affiche "true"
Quand un résultat n'est pas calculable (racine carrée de -1 ou 0/0), on obtient NaN ("Not a number").
NaN est le seul nombre... pas égal à lui même. Pour le tester, il faut utiliser isNaN() :
a= 0/0; alert (a==NaN); // affiche false alert(isNaN(a)); // affiche true
Opérateurs booléens usuels && (et), ! (not), || (ou).
La déclaration de string peut se faire en utilisant des guillements simples '...' ou doubles "....".
s1= "un texte"; s2='un autre texte';
L'opérateur "+" permet de concaténer deux string, voire une string et autre chose (un nombre par exemple).
nom="Turing"; salut="bonjour monsieur "; complet= salut + nom; // complet vaut "bonjour monsieur Turing" x= 3*4; reponse="la valeur calculée est "+ x + "!!!"; // reponse vaut "la valeur calculée est 12!!!
Deux comparateurs disponibles : "==" qui sait faire des conversions, et "===" (trois signe égal) qui n'en fait pas.
a === b
si a et b ont le même type, et correspondent à la même valeur (pour les objets, s'ils ont la même adresse).
a == b
si, après conversion éventuelle, a et b ont la même valeur. Les règles de conversions sont complexes.
si a ou b est un nombre, et que l'autre est une string, on converti la string en nombre, et on compare les valeurs
ainsi, les comparaisons suivantes sont vraies :
"01" == "01" (deux chaînes identiques) 1 == "01" (la chaîne "01" est convertie en nombre, et vaut 1)
En revanche :
"01" != "1" (deux chaînes différentes)
On a les opérateurs usuels < , <=, >, >=
ils fonctionnent sur les nombres
sur les strings: ordre lexicographique
Règles complexes et peu intuitives :
Suggestion: se contenter de la concaténation; pour les autres : utiliser les conversions explicites
s="15"; a= 2 * parseInt(s); alert(a); // affiche 30
length
(leur longueur) charAt(pos)
retourne une StringcharCodeAt(pos)
retourne le code unicode du caractère (si inférieur à 65535)split(separateur)
: renvoie le tableau obtenu en découpant la chaîne.
s= "un,deux,trois"; t= s.split(",");
s= "un,deux,trois"; i= s.indexOf("tr"); // i vaut 8
Notez que ces deux fonctions sont très permissives. Elles acceptent des chaînes qui commencent par un nombre, et, s'il y a du texte après, elle l'ignorent. Pour tester si elles ont réussi, on utilisera la fonction isNaN().
s="1234"; i= parseInt(s); if (isNaN(i)) { alert(s + " n'est pas un nombre"); }
tab= [ ]; // Création du tableau (vide) tab[0]= 2; tab[1]= 3; s= 0; for (i= 0; i < tab.length; i++) { s= s + tab[i]; }
tab= ["un", "deux", "trois"];
length
s= tab.join(""); // s vaut undeuxtrois s= tab.join(":"); // s vaut un:deux:trois
tab= ["un", "deux", "trois"]; tab.push("quatre"); // tab[3] vaut maintenant "quatre"
tab= ["un", "deux", "trois"]; a= tab.pop(); // tab vaut ["un", "deux"] et a vaut "trois"
Pour supprimer un élément dans un tableau, on peut utiliser la
méthode splice
.
t.splice(indice,nombre);
Supprimer nombre éléments dans t à partir de l'indice indice.
En option :
t.splice(indice,nombre, e1, e2,...);
remplace nombre éléments dans t à partir de l'indice indice par e1, e2...
On a introduit ensuite la notion de tableau associatif. Ils associent une clef à une valeur.
var t= {}; t["java"]= "langage de programmation orienté objet"; t["lisp"]= "langage de programmation fonctionnel";
Autre méthode de création :
var t= {"java": "langage de programmation orienté objet", "lisp": "langage de programmation fonctionnel"};
Le mécanisme de javascript pour les tableaux associatifs est celui qui sert à implémenter les objets. Nous reviendrons sur les détails quand nous aborderons le concept.
Pour supprimer un élément dans un tableau associatif :delete t["java"];
if (CONDITION) { ACTIONS1; } else { ACTIONS2; }
Deux syntaxes possibles
for (INIT; TEST; INCREMENT) { ACTIONS; }exemple
s= 0; for (var i= 0; i < tab.length; i++) { s= s+ tab[i]; }
for (var ... in ...)
function forTab() { var t= new Array("un", "deux", "trois"); for (var x in t) { alert( x + " : " + t[x]); } }
affichera successivement "0 : un", "1: deux " et "2 : trois".
var t= {"java": "langage de programmation orienté objet", "lisp": "langage de programmation fonctionnel"}; for (var nom in t) { alert("information sur le langage " + nom + " " + t[nom]); }
while (CONDITION) { ACTIONS; }
var a=10; while(a>1){ alert(a); a--; //decremente a de 1 //attention si vous l'oubliez boucle infinie... }
do { ACTIONS; } while (CONDITION);
var a=10; do{ alert(a); a--; //decremente a de 1 //attention si vous l'oubliez boucle infinie... }while(a>1);
switch (VALEUR_A_TESTER) { case VAL1: ACTIONS; break; case VAL2: ACTIONS; break; default: ACTIONS; }Contrairement au C et au Java, la valeur à tester peut être une chaîne de caractères:
switch (reponse) { case "oui": alert("merci"); break; case "non": alert("au revoir"); break; }
function
.return
à noter:
somme
Dans cet exemple, la variable exempleVariable1 modifiée par la fonction est la même que la variable globale.
var
.Notez que var
est optionnelle (quoique très
fortement conseillée) pour les déclarations de variables
globales, mais obligatoire pour les variables locales. Une
variable utilisée dans une fonction, mais pas déclarée, est
considérée comme globale.
Les paramètres des fonctions sont automatiquement considérés comme des variables locales
Attention, la notion de localité est différente de celle de java : localité par rapport aux fonctions et non par rapport aux blocs
document
, qui représente la page web.getElementById
Un texte
On utilise en particulier la propriété "display", et sa valeur "none", pour faire apparaître et disparaître des éléments.
Exercice: écrire une fonction qui bascule l'élément entre l'état "caché" et l'état visible, et vice-versa.
On peut changer ce qu'une image affiche en modifiant sa propriété "src":
<img id="img1" src="coursJavascriptdata/ledlightblue.png" onmouseover="document.getElementById('img1').src='coursJavascriptdata/ledgreen.png'" onmouseout="document.getElementById('img1').src='coursJavascriptdata/ledlightblue.png'" alt="une bille" />