Javascript |
Ce cours ne nécessite aucune connaissance informatique préalable, excepté celle du HTML. Le Javascript est un langage de programmation appliqué aux objets d'un document HTML.
Le langage de base du Javascript - terme et syntaxe
Commentaire
<html><body> <script><!-- // ligne de commentaire //--></script> |
Comme dans tous les langages, les commentaires sont indispensable pour pouvoir relire un (vieux) code.
En Javascript, vous pouvez mettre du texte (ou du code) en commentaire
en l'encadrant de l'élément ouvrant « /* » et fermant « */ ».
Vous pouvez aussi utiliser « // » pour mettre en commentaire l'ensemble des
caractères placés à sa droite.
Opérateurs unaire
Nous appelons opérateur unaire, un opérateur qui travaille sur une seule opérande. L'opérande, est la valeur numérique utilisé pour effectuer l'opération.
|
Les opérateurs d'incrémentation « ++ » et de
décrémentation « -- » ont une spécificité remarquable. Suivant qu'ils sont
placé avant ou après leurs opérandes (objet d'appartenance et d'application), ils ont
une priorité différente dans l'évaluation de l'expression.
Ainsi sur la variable « a », l'incrémentation « ++a » sera
effectué avant la lecture de la variable, tandis que « a++ » sera effectué
après. Prenons par exemple « a=10 » ; appliquons l'affectation
incrémenté de « a » aux variables « b » et « c »
successivement : « b = ++a » et « c = a++ ». Ce qui nous donne
pour les variables « a », « b » et « c »
respectivement « 12 », « 11 » et « 11 ».
Opérateurs mathématique
Ce sont les opérateurs habituels.
|
L'opérateur modulo (%) retourne le reste de la division entière.
Prenons par exemple : « a=8.4 » et « b=1.5 ». Alors,
« a/b=1.5 », et « a%b=0.9 ». Comme la valeur entière (parseInt)
de « a/b » est « 5 », on a « 5*b+a%b = 8.4 ». On a
donc bien « parseInt(a/b)*b+(a%b) = a ».
L'opérateur division (/) généré une erreur si le deuxième opérande est nul.
Opérateur d'affectation
|
Cet opérateur d'affectation peut être utilisé pour affecter plusieurs variables en même temps :
a = 7, b = 7;
a = b = 7;
Opérateurs associés
Nous désignons par ce terme, l'opération associé à l'objet numérique sur lui-même.
|
Opérateurs relationnel
Ces opérateurs retournent une valeur booléenne vrai (true) ou fausse (false).
|
Opérateurs logiques
|
Opérateurs de décalage binaire
Ces opérateurs effectuent un décalage (à gauche ou à droite) bit à bit sur le premier opérande. Le nombre de décalage est précisé dans la deuxième opérande. Les bits sortant sont perdu, et le/les bits entrés pour le décalage sont mis à zéro, sauf pour « >> » qui dépend du signe de la première opérande.
|
Attention : la deuxième opérande doit être une valeur de l'intervalle [0..31]. Dans tous les cas, le décalage est effectué avec le module de la deuxième opérande par 32 : « a<<(b%32) » ; cela signifie que l'opération de décalage par la valeur 32 est inutile.
Opérateurs associés binaire
Nous désignons par ce terme, l'opération associé à l'objet numérique sur lui-même.
|
Opérateur conditionnel
Cet opérateur devrait s'appeler « expression conditionnel » ; il peut s'appliquer pour l'affectation de valeur, mais peut aussi être utilisé pour l'exécution de bloc suivant la valeur d'une condition. En fait, deux bloc défini seront exécuté selon la valeur d'une expression :
(expression)?bloc1:bloc2;
En appliquant cet opérateur au valeur numérique, nous pouvons affecter une variable comme suite : « a = (b<c)b:c; ». Dans ce cas, si « b<c » est vérifié, alors « a=b », sinon « a=c ».
Priorité des opérateurs
|
Règles de priorité : les expressions entre parenthèses sont prioritaires. Lopérateur de plus haute priorité est le premier calculé : une opérande entre deux opérateurs de priorité différente est lié à l'opérateur de plus haute priorité. Pour les mêmes priorités, le calcule est effectué dans lordre de lecture : une opérande entre deux opérateurs de même priorité est lié à celui de gauche.
Les quelques exemples utilisés pour agrémenter les opérateurs ont fait appel à des notions de variables qui, bien que pas encore expliquées, ne semble pas être déroutantes.
En Javascript, nous aurons besoin des variables ; elles nous permettent de mémoriser des valeurs et même des objets. Nous parlerons d'une variable globale, lorsqu'elle est accessible dans tous le document (voir même par un autre document), et d'une variable locale, lorsqu'elle est accessible seulement dans le sous-programme l'ayant défini.
Pour déclarer une variable, nous disposons du mot « var » avec la syntaxe suivante :
var identifiant [=affectation][, identifiant [= affectation] [, ...]];
Où « identifiant » est le nom de la variable et « affectation » une valeur, une expression ou même un objet. Notez que l'affectation est facultative, et que plusieurs variables peuvent être définir en même temps.
Attention, une erreur sera générée, si vous accédez à une variable inexistante. Il est aussi possible de définir une variable simplement en effectuant une affectation à un nouvel identifiant (/*2*/ et /*4*/) ; dans ce cas elle est globale. Pour définir une variable globale (accessible dans tous le document), nous la déclarerons dans le bloc principale (/*3*/ et /*4*/) ou nous effectuons une affectation directe (/*2*/ et /*4*/). Pour définir une variable locale (accessible seulement dans le sous-programme de définition), nous utiliserons une déclaration avec « var » (/*1*/). Si vous exécutez le programme ci-contre, une erreur se produira sur le deuxième « alert ». En effet, la variable locale « c » n'existe que dans le sous-programme « toto ». |
|
Ecriture des nombres
Décimal : un nombre est décimal s'il commence par un chiffre excepté le
zero.
Octal : un nombre octal commence toujours par un zéro et contient que des
chiffres de 0 à 7.
Hexadécimal : il commence par le préfixe « 0x ».
Tableaux : l'objet
Un tableau est un identificateur regroupent un ensemble d'élément indexable. Nous pouvons définir un tableau qu'à partir de la version 1.1 du Javascript.
Syntaxe : [var] identificateur = [new] Array([max]);
où « identificateur » est le nom du tableau, et « max » l'index du dernier élément. Le tableau a une taille de « max+1 » éléments ; sa taille est lisible avec sa propriété « length ». La valeur « max » est facultative, car il suffi d'affecter un élément pour qu'il existe ; dans ce cas, l'ensemble des éléments d'index inférieur sont créer s'ils n'existent pas. Le terme « new » peut être omis en Javascript.
Dans notre exemple, nous déclarons notre tableau
"T1" en /*A*/. Il existe, mais sans valeur. En /*G*/ nous définissons et affectons le tableau "T2" avec
deux éléments. |
|
Caractères spéciaux - séquence d'échappement
Certaines caractères ne sont pas intégrable simplement dans une
chaîne de caractère, car il sont générateur d'action ; tel que le « \ » et
le « retour chariot » (à la ligne) ...
Pour palier ce problème, nous avons accès aux séquences d'échappement suivantes :
|
En Javascript, vous pouvez utiliser indifféremment l'apostrophe ou le guillemet pour définir une chaîne de caractère. Dans cette chaîne, vous ne pouvez pas réutiliser ce caractère de définition, car cela marquerai la fin de la chaîne. Vous ne pouvez pas non plus terminer la chaîne avec un caractère différent de celui qui commence. Ainsi "coucou", 'coucou', "l'eau" et 'l\'eau' sont des chaînes de caractère. Si vous écrivez "coucou', la chaîne n'est pas fermée, et une erreur sera générée. Sachez toutefois, que le guillemet est le caractère de chaîne utilisé en C/C++, et que l'apostrophe et utilisé en PASCAL et en ASSEMBLEUR.
La méthode alert
Cette méthode nous permet d'afficher une fenêtre contenant un texte données en paramètre. Elle nous permettra de suivre nos programmes afin de les mettre au point.
Syntaxe : [window.]alert(paramètre); Le paramètre passé à la méthode « alert » peut être une chaîne de caractère (/*1*/ et /*2*/), un objet (/*3*/), ou une variable même indéfini (/*2*/ et /*4*/). Attention, « b » est déclaré ; sinon un message d'erreur sera généré. Ici, la variable « b » n'a pas de valeur, mais elle existe (/*4*/). |
|
Sous-programmes : les fonctions
Vous remarquerez rapidement que vous utiliserez souvent le même code (Javascript) pour rendre vos pages plus interactive. Dans cette idée, il sera plus intéressant de créer un sous-programme qui pourra être appelé et ainsi éviter les redondances.
En Javascript (comme en C), les sous-programmes sont définit sous le terme de fonction. Une fonction est un bloc de code, pouvant, facultativement, recevoir (arguments/paramètres) et retourner des données. Le nombre de paramètres de la fonction peut être défini (déclarer) ou indéfini. Dans ce dernier cas, vous devrez gérer vous même les paramètres.
Une fonction doit être déclarer à l'intérieur du conteneur « script », et doit être charger avant d'être appelée ; cela signifie, que lors du chargement du document, une erreur sera produite si un appelle est fait sans que la fonction ne soit encore chargée. Pour éviter ce style de problème, vous pouvez déclarer vos fonctions en amont de vos appels. Vous pouvez aussi placer l'ensemble de vos fonctions dans le bloc d'entête « head » du document ; ainsi, vos fonctions seront forcément chargées avant tous appelles du document.
Syntaxe d'une fonction : |
function identificateur (
liste des paramètres ) |
où « identificateur » représente le nom de la fonction ; la « liste des paramètres » est facultative ainsi de que le code. Pour que notre fonction retourne une donnée, nous utiliserons le mot réservé "return ».
Regardons quelques exemples : La fonction « rien » ne
déclare pas de paramètre, et ne retourne pas de donnée. |
|
Attention : bien que vous déclariez deux paramètre, vous pouvez en recevoir moin, comme plus. Regardons l'exemple de la fonction « Aff_par() » : |
Instruction conditionnel - IF
Nous avons déjà vu qu'il existe un opérateur conditionnel : « (condition)?exp:exp; ». Avec cette opérateur, nous pouvons effectuer un traitement suivant l'état de la condition. Cette opération retourne toujours une valeur, qui n'a pas l'obligation d'être utilisée (récupérée).
En Javascript, nous disposons aussi d'une instruction conditionnelle qui ne retourne pas de valeur, provenant du C.
Les boucles
Dans plusieurs des nos exemples précédent, j'ai utilisé l'instruction de boucle for, sans vous l'avoir définir. Les exemples étant très parlant, je pense que vous avez déjà une petite notions sur cette instruction ; mais regardons tous cela plus en détaille.
Boucle - For, numérique
Cette instruction nous permet d'exécuter du code un nombre de fois définir (dans la plupart des cas) ; en fait, tant qu'une condition est vrai. De ce fait, le code peut ne pas être exécuté si la condition est fausse au départ.
Attention : vous risquez de bloquer le navigateur si votre condition
reste toujours vrai. Vérifiez toujours avant d'exécuter votre code qu'il existe une
issue de sortie de la boucle for.
L'instruction break et continue peuvent être
utilisés dans cette boucle.
Boucle - For, objet
Boucle - While
Cette instruction nous permet d'exécuter du code (ou un bloc de code) tant qu'une condition est vrai. Le code peu ne pas être exécuté si la condition est fausse au départ.
Attention : vous risquez de bloquer le navigateur si votre condition
reste toujours vrai. Vérifiez toujours avant d'exécuter votre code qu'il existe une
issue de sortie de la boucle « while ».
L'instruction « break » et « continue »
peuvent être utilisés dans cette boucle.
Boucle - instruction break
Boucle - instruction continue
with
Cette instruction nous permet de sous entendre le chemin d'accès à une propriété d'un objet.
Syntaxe : with ( objet ) code;
Où « objet » est le nom (avec chemin) d'un objet, et « code » du code ou un bloc de code.
parseInt(), parseFloat(), isNaN()
eval(), switch...
Dernière mise à jour : dimanche 06 janvier 2008 |