Premiers pas en JavaScript

4.2 Variables texte ou string, la fonction eval()
cuy copyleft
  See You Why?  

 


variables numériques (4.1) | | variables boolennes ou logiques (4.3)

Contenu

 

 

I. Variables numériques

voir <<<séquence précédente

 

II. Variables 'string'...

Nous avons vu dans la séquence précédente comment affecter une variable numérique.

var ma_variable = 32;

En informatique, une chaîne de caractères est une suite ordonnée de caractères.
La chaîne de caractères est un type de donnée dans de nombreux langages informatiques.
En anglais, on emploie le terme string.

Et si l'on parle de variable string, c'est que JS peut mémoriser (mettre en boite) des lettres, des mots, voire même des phrases. C'est ce qui est fait sur la page d'accueil du site (voir ici), on y voit une pensée du moment qui apparait de façon aléatoire, l'auteur de chacune des pensées et une petite phrase qui varie selon l'heure qu'il est. Ces chaines de caractères sont placées dans des variables en langage PHP, c'est pourquoi vous ne voyez qu'une seule des quelque 1000 pensées stockées.

Rappelez-vous ce qui a été dit en introduction,
en JS (langage côté client), vous auriez reçu les 1000 pensées, et c'est votre ordinateur qui en aurait choisi une...
en PHP (langage côté serveur), c'est le serveur qui les lit toutes, en choisit une et vous l'envoie au format HTML.

Quoi de plus sympatique pour rendre ses pages dynamiques et interactives que de retenir le prénom du visiteur de votre page (votre élève, par exemple) et de retenir sa ou ses réponses à des questions posées, afin de réagir de façon adéquate ?

Quelle place prend une variable string en mémoire ?
Une réponse rapide consiste à dire "au moins autant d'octets que de caractères dans la chaine". Exact, mais peu précis.
Pour être plus précis, il faut aussi rappeler que :

Reste à savoir comment affecter une variable JS d'une chaine de caractères ?

Nous finirons en abordant la fonction eval() qui permettra de trouver la valeur numérique d'une expression en 'string'.

A. règle générale...

Rien de plus facile :

var ma_variable = "voici mon texte";

En JS, on indique qu'il s'agit d'une variable texte en notant sa valeur entre guillemets.

On observera que :

      1. un mot est une chaine de caractères ;
      2. une chaine de caractères peut contenir des espaces qui ne sont que des caractères ordinaires, comme les autres ;
      3. par conséquent, une chaine de caractères peut contenir plusieurs mots séparés par des espaces ;
      4. les points, virgules, points d'interrogation... sont des caractères, donc une chaine de caractères peut contenir des phrases, voire des paragraphes, voire même le contenu d'un fichier... nous y reviendrons (voir ici).

Le lecteur aura peut-être reconnu l'écriture et la syntaxe de l'instruction PROMPT rencontrée dans notre chapitre 2 :
    var ma_variable = prompt("Quel est ton pr&eacute;nom ?","");
qui stocke dans la variable ma_variable la réponse donnée par l'internaute à la question "Quel est ton prénom ?".

B. à ne pas faire...

Une erreur classique des novices en programmation, c'est d'oublier les guillemets :

var ma_variable = texte;

En réalité, JS va alors considérer texte comme étant le nom d'une variable et s'efforcera de mettre dans la variable ma_variable le contenu de ce qu'il croit être une autre variable texte... alors que ce n'est pas votre volonté...

var ma_variable = "texte";

alors qu'avec les guillemets, JS comprendra que le mot 'texte' doit entrer dans la variable dénommée 'ma_variable'.

C. et s'il me faut des guillemets dans mon texte ?

Le lecteur attentif aura vite saisi la difficulté d'introduire un texte qui comprend des guillemets. Le navigateur va-t-il comprendre qu'il s'agit de guillemets du texte ou de guillemets terminant la valeur de la variable ?

Trois solutions s'offrent au programmeur :

      1. placer un backslach \ devant chaque guillemet intérieur (noté en rouge ci-dessous) d'une chaine de caractères et laisser inchangés les guillemets extérieurs :
        phrase = "Ne dis pas : \"C\'est impossible !\". Dis : \"Je ne l\'ai pas encore fait.\"";
        et pourquoi ne pas profiter de l'occasion pour faire la même chose avec les simples quotes ou apostrophes...
         
        Certains appellent cette méthode "emploi d'un caractère d'échappement" ou "escape sign".
         
      2. remplacer les guillemets intérieurs par d'autres caractères HTML spéciaux (voir ici) qui s'en approchent :
        (nous pensons ici
        au guillemet anglais ouvrant (&ldquo; ou &#147;),
        au guillemets anglais fermant (&rdquo; ou &#148;),
        au chevron ouvrant « (&laquo; ou &#171;),
        au chevron fermant » (&raquo; ou &#187;),
        au double prime (&Prime; ou &#8243; (attention au P en capitale)),
         
      3. remplacer les guillemets intérieurs par un simple quote ou apostrophe... mais ce caractère a aussi un sens particulier en JS, d'où le danger de générer des erreurs dans certains cas de multiples imbrications de guillemets et quotes (un exemple ci dessous, extrait de la programmation du menu apparaissant sur la majorité des pages de ce site CUY) :
        zlien[z][i]= '<a href = ' + sitemlinks[z][i] + ' class=ejsmenu title="'+ sitemcomm[z][i] +'">' + sitems[z][i] +'</a>';

D. la fonction eval()

Le lecteur pourrait souhaiter retrouver la valeur d'une expression donnée sous forme de chaine de caractères. Cette chaine (ce string) sera évaluée comme s'il s'agissait d'un code source.

Ainsi,
eval(3*4) aura la valeur 12;

var a=2;
chaine="a = a + 21";
eval(chaine);
document.write("Valeur de a = "+a);
écrira "Valeur de a = 23"

var seq = "var x=5;var y=6;function multipliepary(a){return a * y;}";
eval(seq);
document.write("x=" + x + "<br>");
document.write("y=" + y + "<br>");
document.write("multipliepary(x)=" + multipliepary(x) + "<br> ");
écrira : "x=5
y=6
multipliepary(x)=30 "

Certains sites conseillent d'éviter cette fonction eval car elle appelle le compilateur (je pense qu'ils devraient dire interpréteur) JavaScript, ralentit le système, est gourmande en mémoire et présenterait des risques de sécurité... ne me faites pas le reproche de ne pas vous l'avoir dit.

La fonction eval() interprète une chaîne de caractères en tant que code de programme JavaScript. La chaine de caractères citée doit être du code JavaScript exécutable correctement dans le contexte existant au moment de l'appel de cette fonction. La fonction eval() envoie ce code à l'interpréteur JavaScript qui l'analyse et l'exécute.

 

III. Variables logiques ou booléennes

voir suite >>>

 

IV. Variables 'null'

voir suite >>>

 

V. Variables tableau ou 'array'

voir suite >>>

 

VIII. Exercices sur les types de variables

voir suite >>>

 

IX. Test relatif aux types de variables

voir suite >>>

 


variables numériques (4.1) | | variables boolennes ou logiques (4.3)