Accueil

Traduction

Tutoriel sur JS natif, Vue.js, jQuery.js & Node.js

Tutoriel JavaScript - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

JavaScript : les conditions

Il existe bien sûr le "if", le "if ... else" , le "if ... else if ...".
Mais aussi l'opérateur ternaire et la structure switch.

La condition if

Exemple

Afficher "sénior" ou "encore jeune" en fonction de l'âge.

Le script

var vage = prompt('tapez un votre âge sous forme d\'un entier') ; 
vage = parseInt(vage) ; // conversion en entier 
if(vage >= 60) {alert(vage + " ans  donc vous êtes senior") ; }
if(vage < 60) alert(vage + " ans donc vous êtes encore jeune"); 

Commentaire du script

Je rappelle que toute saisie avec la fonction native prompt() est de type string. Il faut donc ensuite convertir la chaine au format numérique en un entier.

Le script comporte deux conditions.
Une condition est entre parenthèse après le mot réservé if.
Une condition est une expression logique qui retourne une valeur logique (un booleen : true ou false).
Si la première condition retourne true alors il y a affichage du message : "vous êtes sénior".
Si la deuxième condition retourne true alors il y a affichage du message : "vous êtes encore jeune".
Dans la dernière instruction il n'y a pas d'accolades après le test. En effet il n'y a qu'une instruction donc les accolades sont facultives.

Syntaxe:

if (condition) 
		{ bloc d'instructions 	}
OU 
if (condition) instruction unique ; 

Le rendu

Testez ce script !

Les opérateurs de comparaison

Dans chacune des trois conditions l'expression logique est basée sur un opérateur de comparaison.

Nous avons utilisé : >= (supérieur ou égal ?) et < (inférieur à ? ) mais il existe aussi :
== : est égal ?
!= : est différent ?
>= : est supérieur ou égal ?
<= : est inférieur ou égal ?

Ne confondez pas l'opérateur d'égalité (==) avec l'opérateur d'affectation (=).

Opérateurs logiques

Afficher la sanction en fonction de la moyenne obtenue à l'examen : admis, oral de rattrapage, refusé, erreur.
La moyenne est comprise entre 1 et 19.

Le script

	var vmoyenne  = prompt('tapez la moyenne à l\'examen') ; 
	vmoyenne = parseInt(vmoyenne) ; // conversion en entier 
	if (vmoyenne >19 || vmoyenne <1 ) alert("Erreur de saisie !"); 
	if(vmoyenne >= 12) alert ("Admis !"); 
	if(vmoyenne >= 10 && vmoyenne < 12) alert("Oral de rattrapage !"); 
	if(vmoyenne < 10) alert("Refusé !"); 

Remarquez que la chaine qui est l'argument de la fonction prompt contient une apostrophe . Donc il faut la délimiter cette chaîne soit par des doubles quotes (") soit par des simples quotes (') mais à condition d'échapper alors l'apostrophe (\').

Attention ce script est correct sur le plan syntaxique mais nul sur le plan algorithmique.
En effet il peut arriver que deux conditions soient vérifiées ce qui n'est pas normal. Ainsi si vous saisissez 20 : le premier et le deuxième tests sont VRAI donc affichage de "Erreur de saisie" puis "Admis" ...
Il aurait fallu utliser des tests imbriques plutôt que des conditions basés sur des opérateurs logiques. Voir plus loin.

Dans l'exemple ci-dessus nous avons utilisé les opérateurs logiques && (AND), || (OR) mais il existe aussi ! (NOT). L'opérateur logique NOT est très utilisé avec des booléens.

Le rendu

Testez ce script !

La condition if ... else ...

Exemple

Reprenons le thème de l'âge. Nous aurions pu écrire plus simplement :

...
	if (vage >= 60) {alert(vage + ' ans donc vous êtes senior') ; }
	else alert(vage + ' ans donc vous êtes encore jeune) ; 
...

L'instruction après le else est exécutée si la condition retourne FALSE.

Que ce soit dans le si ou dans le sinon les accolades sont ici facultatives puisqu'il n'y a qu'une instruction. Elles deviennent obligatoires en cas de bloc d'instructions.

Opérateur ternaire

Un test avec une concision remarquable

Reprenons le thème de l'âge. Le script peut s'écrire de la façon suivante :

	var vage = prompt('tapez un votre âge sous forme d\'un entier') ; 
	vage = parseInt(vage) ; // conversion en entier 
	var vstatut = vage >=60 ? " senior !" : " encore jeune !" ; 
	document.write ("votre âge :" + vage + " ans  : " + vstatut); 

Observons la troisième instruction ; elle est basée sur l'opérateur ternaire.
Si le test est VRAI la variable vstatut reçoit "senior !" sinon elle récupère "encore jeune !".
Syntaxe : test ? valeur si test retourne vrai : valeur si test retourne faux

Testez ce script !

La fonction parseInt(chaine) est très efficace.
Tapez "40 ans" ; vage récupère après conversion l'entier 40
Tapez "70 printemps" ; vage récupère après conversion l'entier 70.
Donc il n'est pas nécessaire que la chaine saisie soit au format numérique du moment qu'elle commence par au moins un chiffre, la conversion en entier s'effectue.

Avantage de l'opérateur ternaire

Le test ternaire peut être imbriqué dans une autre instruction.
Ainsi si je reprends le thème précédent, je peux remplacer les deux dernières instructions par une seule. Le script devient alors :

var vage = prompt('tapez un votre âge sous forme d\'un entier') ; 
vage = parseInt(vage) ; // conversion en entier 
document.write("votre âge est  : " + vage + " ans "  + (vage > 60 ? "sénior ! " : "encore jeune !") );

Attention le test ternaire doit alors être encadré par des parenthèses.

Les "if... else if ..." imbriqués

Exemple 1 : affichage du nom du département à partir de son code minéralogique

Le script :

var vcodepostal  = prompt('tapez votre code postal :  59 ou 60 ou 62 ou 80 ou 02') ; 
vcodepostal = parseInt(vcodepostal) ; // conversion en entier 
if(vcodepostal == 2) alert ("Vous résidez dans l'Aisne"); 
else if ( vcodepostal == 59) alert("Vous résidez dans le Nord") ;
	else if ( vcodepostal == 60) alert("Vous résidez dans l'Oise") ;
		else if (vcodepostal == 62) alert("Vous résidez dans le Pas de calais") ; 
			else if (vcodepostal == 80) alert("Vous résidez dans la Somme") ;
				else alert("erreur de saisie"); 

Testez ce script !

Mais comment fonctionne cette structure ?
Si la première condition retourne false alors il y a examen du deuxième test. Si le deuxième test retourne false alors examen du troisième test et ainsi de suite ...

Exemple 2 : reprenons le thème de l'examen

La note saisie doit être comprise entre 1 et 19 ; note >=12 : admis ; note comprise entre 10 et 12 : oral ; note inférieure à 10 : refusé.

Nous avons vu que la première solution n'était pas satisfaisante.
Le script corrigé (extrait) :

...
if (vmoyenne >19) alert('Erreur de saisie');
	else if (vmoyenne >=12 ) alert('Admis'); 
		else if (vmoyenne >=10) alert('Oral de rattrapge'); 
			else if (vmoyenne >=1) alert('Refusé'); 
				else alert('erreur de saisie'); 

Testez Le script 'debuggé' !

La condition switch

Reprenons le thème précédent (affichage du nom du département en fonction du code minéralogique).
Il y a une autre solution avec la structure switch (cas de)

Le script

var vcodepostal  = prompt('tapez le code du département :  02 ou 59 ou 60 ou 62 ou 80') ; 
vcodepostal = parseInt(vcodepostal) ; 
// conversion en entier 
switch(vcodepostal)
	{
	case 2 : alert('Aisne'); break ; 
	case 59 : alert('Nord'); break ; 
	case 60 : alert('Oise'); break ; 
	case 62 : alert('Pas de calais'); break ; 
	case 80 : alert('Somme'); break ; 
	default : alert('erreur de saisie') ; 
	} // fin switch 

Testez ce script !

Fonctionnement du code

Reconnaissez que c'est beaucoup plus clair ...

Si vcodepostal est égal à 2 alors affichage de "Aisne" puis sortie du "switch" (grâce à l'instruction break) sinon examen du case suivant.
L'instruction associée à default est exécutée si aucun des cas n'est vérifié.

Attention la structure switch souffre cependant d'un gros inconvénient ; l'opérateur de comparaison (implicite d'ailleurs) est forcément égal. Impossible d'écrire, par exemple : case >=60.

Affichages dans la console du navigateur

Les résultats peuvent être affichées dans la console du navigateur.
Il suffit de remplacer "alert()" par "console.log()".
Donc le script devient :

var vcodepostal  = prompt('tapez le code du département : 02 ou 59 ou 60 ou 62 ou 80') ; 
vcodepostal = parseInt(vcodepostal) ; // conversion en entier 
switch(vcodepostal)
{
	case 2 : console.log('Aisne'); break ; 
	case 59 : console.log('Nord'); break ; 
	case 60 : console.log('Oise'); break ; 
	case 62 : console.log('Pas de calais'); break ; 
	case 80 : console.log('Somme'); break ; 
	default : console.log('erreur de saisie') ; 
} // fin switch 

Comment ouvrir la console du navigateur sous Chrome ?

Pour ouvrir la console sur Chrome, utilisez le raccourci clavier suivant :Ctrl + Maj + J (sous Windows).
Vous pouvez également ouvrir la console en cliquant avec le bouton droit de la souris sur la page, puis en sélectionnant "Inspecter" puis l'onglet "console" puis cliquez sur l'onglet "console".

Première application web

Dans le cadre d'un programme JS définitif, les boites de dialogue prompt(), alert(), console.log(), confirm() doivent être bannies.
Les entrées-sorties doivent se faire dans le cadre d'un formulaire HTML.

Reprenons la thématique "affichage du nom d'un département en fonction de son code".
Les entrées/sorties se font désormais dans le cadre d'un formulaire HTML.

Le code HTML de la page

La saisie du code minéralogique se fait dans une liste déroulante. Donc aucun risque d'erreur de saisie.
Le nom du département correspondant s'affiche dans une zone de texte en lecture seule.
Notez que chaque élément du formulaire est affecté d'un ID. C'est indispensable dans le cadre du traitement des données par le script !
A chaque changement de valeur dans la liste déroulante il y a appel d'un fonction JS : ftrait().

Le script

function ftrait()
{
	var vdpt =""; // déclaration d'une variable
	var vcodepostal  = document.getElementById("liste").value ; 
	// lire dans la liste la valeur retenue
	vcodepostal = parseInt(vcodepostal) ; 
	// conversion en entier de la chaine numérique
	switch(vcodepostal)
	{
		case 2 : vdpt ="Aisne"; break ; 
		case 59 : vdpt ="Nord"; break ; 
		case 60 : vdpt ="Oise"; break ; 
		case 62 : vdpt ='Pas de calais'; break ; 
		case 80 : vdpt ='Somme'; break ; 
	} // fin switch 
	document.getElementById("dpt").value =vdpt; 
	// écrire dans le champ du formulaire
} // fin fonction

On manipule dans le script un élément du formulaire via son ID avec la méthode document.getElementById(nomId) Comme on manipule plus précisément le contenu d'un élément (en lecture ou écriture) il faut rajouter ".value" !

Le rendu dans un iframe :