JavaScript, langage et utilisation

Introduction

Les inconvénients :
Les règles :

Liens utiles

Un petit exemple pour commencer


nombre 1

nombre 2

Résultat

Le même avec une table...


nombre 1
nombre 2
Résultat

Javascript dans une page web

Comment inclure du code dans une page ?

Plusieurs solutions :

La balise script

Appels javascript lié à des événements

Constructions de base

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);
  

Variables en javascript

Types de base

noter l'absence d'un type caractère !

Quelques opérations sur les types de bases

Les nombres

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
  

Les booléens

Opérateurs booléens usuels && (et), ! (not), || (ou).

Les strings

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!!!
      

Comparaisons

Égalité

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)
  

Comparaisons

Ordre

On a les opérateurs usuels < , <=, >, >=

ils fonctionnent sur les nombres

sur les strings: ordre lexicographique

Conversions automatiques

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
  

les chaînes

Chaînes et nombres

Deux fonctions de javaScript sont particulièrement intéressantes:

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");
	}

les tableaux (Array)

Supprimer un élément dans un tableau

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...

Tableaux associatifs

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"];

Structures de contrôle

if

if (CONDITION) {
  ACTIONS1;
} else {
  ACTIONS2;
}

for

Deux syntaxes possibles

for (INIT; TEST; INCREMENT) {
  ACTIONS;
}
exemple
s= 0;
for (var i= 0; i < tab.length; i++) {
  s= s+ tab[i];
}

for (suite)

Pour parcourir les indices d'un tableau, on peut utiliser 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".

for (fin)

Fonctionne aussi pour les tableaux associatifs :
  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

while (CONDITION) {
  ACTIONS;
}

exemple

var a=10;
while(a>1){
  alert(a);
  a--; //decremente a de 1
       //attention si vous l'oubliez boucle infinie...
}

do...while

do {
  ACTIONS;
} while (CONDITION);

exemple

var a=10;

do{
  alert(a);
  a--; //decremente a de 1
       //attention si vous l'oubliez boucle infinie...
}while(a>1);

switch

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;
}

les fonctions



à noter:

Variables globale



Dans cet exemple, la variable exempleVariable1 modifiée par la fonction est la même que la variable globale.

Variables locale





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

Manipulation de la page Web

But: pouvoir lire et modifier des éléments de la page web par programme.

Première approche du DOM

Propriétés des éléments

Un élément retourné par getElementById a plusieurs propriétés, que l'on peut lire et/ou écrire. Nous allons les détailler.

DOM et CSS (Cascading Style Sheets)

Les caractéristiques de cet élément sont contrôlées par les CSS.






DOM et CSS (suite)

On utilise en particulier la propriété "display", et sa valeur "none", pour faire apparaître et disparaître des éléments.

Vous le voyez ?


Exercice: écrire une fonction qui bascule l'élément entre l'état
"caché" et l'état visible, et vice-versa.


Manipulation des images

On peut changer ce qu'une image affiche en modifiant sa propriété "src":

une bille
  <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"
/>